Perlについての質問箱 25箱目
■ このスレッドは過去ログ倉庫に格納されています
0230デフォルトの名無しさん
2006/06/12(月) 01:17:27> a.plのスコープで実行されるんじゃなくて、
> File/Find.pm内のfind関数のスコープで実行される
うわぁ、違う。一番肝心なところが違う。
というか最後から7~4行目と2~1行目で言っていることが矛盾していないか。
その本の言いたいことはその後ろに、
「ように思うかもしれないが、クロージャは作られた場所の(静的)スコープが記録されており、
find関数がどうなっているかは関係なく、クロージャの作られたスコープで動作する。」
と続く。
ちなみに、呼び出し元が動的スコープだった場合(つまりこのときはクロージャではない)は
呼び出された関数から見えることもある。File::Findの例ではパッケージが違うので見えないけれど。
{
local $var = 10;
function(sub { print "anonymous: $var\n" });
}
sub function {
print "function: $var\n"; # localだと$varが見える
$var = 5; # 勿論書き換わる
shift->();
}
■ このスレッドは過去ログ倉庫に格納されています