mm
1999/12/06(月) 02:08:30
本題の方は、よく分からないんですが、
まず、my $b が foreach のループ変数の局所化するためのものなら、
これは不要です。↓を参照して下さい。
../199911/99110412.htm
また、上のリンクではウソを書いてしまいました。
foreach のループ変数が my 変数を隠す場合は、ダイナミックには参照できません。
そういうことも含めて、下の例のように、$a が何を指しているのか、
いろいろややこしいことになるおそれがある
ってことではないでしょうか?(よくは分かりませんが)
@b = ('loop');
$a = 'global';
foreach $a (@b) {
p('1:');
}
$test = &test1;
&test2;
&$test;
sub test1 {
my $a = 'lexical';
foreach $a (@b) {
print "2:$a\n";
p('3:');
sub test2 {
print "4:$a\n";
p('5:');
}
return sub {
print "6:$a\n";
p('7:');
}
}
}
sub p { print "$_[0]$a\n"; }
----------- 実行結果 -----------
Variable "$a" will not stay shared at test.cgi line 15.
1:loop
2:loop
3:global
4:lexical
5:global
6:loop
7:global