小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

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