変数のスコープ
次のコード中で、関数 &a() の中から $global にアクセスできないと思ってた…
追記:読み返すとおかしなこと書いてるな…(というより、当たり前だろっていう…)、前から「思ってた」んじゃなくて、プログラム書いてる途中になぜかそう「思ってしまった」という方が正しい。
use strict; use warnings; my $global = "Global"; a(); sub a { print $global; }
関数だからって例外じゃないんだな。
単純にスコープはブロックだけで決まるのか。
こんな感じで関数の定義部分と main 部分を分けた方がよいのかも。
というより main 関数を定義して、それを最初に呼び出した方が読み易いな。
use strict; use warnings; { my $global = "Global"; a(); } sub a { print $global; }
参考
Minimal Perl (原著) p.380