トップ > Perl Tips > 絶対やってはいけないエラー(無限ループ)


 ■ 絶対やってはいけないエラー(無限ループ)

Prev:エラーになる例(2)(パーミッション)

無限ループというのは、脱出できない繰り返し処理のことです。
いったん入ってしまうと、サーバ側から直接停止させるまでずっと止まらなくなります。
必ず終了できるように条件を設定する必要があります。
繰り返し処理については繰り返し(while,until,for,foreach)をご覧ください。
無限ループの例も上のページで一部紹介されています。

まずは簡単な例です。※くれぐれも共用サーバなどで実行しないでください。

while (1) { print "テスト"; }
(条件式が常に真であるためループします。)

until (0) { print "テスト"; }
(条件式が常に偽であるためループします。)

for(;;) { print "テスト"; }
(条件式が常に真であるためループします。)

不等号の向きを変えるだけで無限ループになることがあります。
以下の2つのうち1つは無限ループになるものです。実行せずに当ててみてください。

<1>
for ($i=1; $i<0; $i++ ) { print "テスト"; }
<2>
for ($i=1; $i>0; $i++ ) { print "テスト"; }

無限ループとなるのは<2>です。
$i>0が真のままで偽にならず、限りなく実行されます。
一方<1>では、「テスト」が1つも表示されません。
$i<0が偽となり、直ちに終了します。

今回説明した無限ループは、実行したことによってサーバが停止することがあります。
ご自分でスクリプトを作成される際は、十分にお気をつけてください。




トラックバック

このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/61