- ベストアンサー
whileの$_とforeachの$_の関係
以下のコードにおけるwhileとforeachでの$_の使いかたについて教えてください。 my @foos = qw( a b ); sub foo1 { open FH, "foo.txt"; while (<FH>) { chomp; print "$_"; } # while (my $x = <FH>) { # chomp $x; # print "$x"; # } print "\n"; } sub foo2 { foreach (@foos) { print "<$_>"; foo1(); } print "\n"; } foo2(); foo2(); このコードと同じディレクトリに以下のような内容のfoo.txtをおいて実行します。 x y すると、以下のような結果が得られました。 <a>xy <b>xy <>xy <>xy 一回目のfoo2で@foosの内容が消えてしまいます。一方、コメントアウトしてあるようにwhileに変数($x)を使うと期待したとおりの結果が出ます。なぜ、このような結果になるのでしょうか。ご存知の方がいらっしゃったら教えてください。宜しくお願いします。ちなみに、WinXP + ActivePerl(v5.8.6)で試しました。
- みんなの回答 (2)
- 専門家の回答
お礼
whileの終了条件のundefが@foosに代入されていたのでしょうね。$_がグローバル変数であることと、$_を変更すると元のデータが変更されることを見落としていました。ご回答、ありがとうございました。