Perlにはファイルグロブという機能がありファイル一覧を取得できます。通常はリストコンテキストで受け取るのですが、スカラーコンテキストだと例えばカレントディレクトリにa.txt, b.txt, c.txtと3つのファイルがある場合、次のコードの結果は
while($a=< *.txt>){
print "$a\n";
}
以下のようになります。
a.txt
b.txt
c.txt
となります。
しかし、次のようにループを展開すると常に最初のファイルが表示され、
$a=< *.txt>;
print "$a\n";
$a=< *.txt>;
print "$a\n";
$a=< *.txt>;
print "$a\n";
次のようになります。
a.txt
a.txt
a.txt
うーん、なんかすっきりしません。
よくわからんけど,後者は毎回別のファイルグロブを生成しているからじゃないかな?
>よくわからんけど,後者は毎回別のファイルグロブを生成しているからじゃないかな?
そうなんですが、ループの場合でも毎回別のファイルグロブを作成する方が自然な気がします。ちなみにwhileループじゃなくforループでも同じでした。じゃあ、GOTO文で回したらどうななのか?とか妄想は膨らみます。