Perlでforeach文をかますとレキシカルスコープが変
以下のように $wk1 と $wk2 は同じレキシカルスコープなのに、$wk2 だけがサブルーチンxxxで『Use of uninitialized value』エラーになるのです。
どうも foreach文 をかますと $wk2 のレキシカルスコープが切れてしまう感じなのです。
これ、バグなのかな、それとも仕様かな・・・。
ちなみに、レキシカル「my $wk2;」をグローバル「our $wk2」にすれば、エラーになりません。
use strict; use warnings; my $wk1 = "AAA"; my $wk2; my @result = ("aaa"); foreach $wk2 (@result) { &xxx(); } sub xxx { print $wk1, ' In $wk1', "\n"; print $wk2, ' In $wk2', "\n"; }
実行結果
C:\Documents and Settings\test>test01.pl AAA In $wk1 Use of uninitialized value in print at C:\Documents and Settings\test\test01.pl line 14. In $wk2