読者です 読者をやめる 読者になる 読者になる

変数のスコープ

次のコード中で、関数 &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