Perlについての質問箱 25箱目
■ このスレッドは過去ログ倉庫に格納されています
0216デフォルトの名無しさん
2006/06/11(日) 18:22:17という本のクロージャという項目に書かれていた
内容について質問です
ちょっと長くなりますがお許し下さい
引用----------------------------------------
use File::Find;
my $total_size = 0;
find(sub { $total_size += -s if -f }, "."};
print $total_size, "\n";
この無名サブルーチンが変数$total_sizeにアクセス
している点に注目して下さい。変数$total_sizeが無名
サブルーチンのスコープの外部で宣言されているにも
かかわらず、この無名サブルーチンは変数にアクセス
しています。つまり、findから呼び出されたコールバック
サブルーチンは、「「「本来なら直接アクセスできない変数
にアクセスでき」」」、さらにその変数の値を更新することが
できるのです。
---------------------------------------------------
「「「」」」で囲んだところが理解できません。
たとえば
my $value = 10;
function();
sub function {
print $value;
}
このコードはちゃんと10と表示されます。サブルーチン内から
サブルーチン外で宣言された変数には直接アクセスできます。
なのに本では「本来なら直接アクセスできない変数」と書かれ
ています。どういうことなのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています