小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

Perlでmyとlocalの違い

Perlでは、変数宣言がありません。また、変数スコープはグローバル(サブルーチンを越えてプログラム全体で共有される)です。
しかし、my関数とlocal関数を使うことにより、あたかもローカル変数宣言のようにできます。
また、myとlocalでの違いは、以下の通りです。

myで宣言された変数はレキシカルスコープ(lexical scope)を持ちますが、
localで宣言された変数はダイナミックスコープ(dynamic scope)を持ちます。
myで宣言された変数は宣言されたブロックのみで有効です。
一方、localで宣言された変数は呼び出したサブルーチンの先でも有効です。

http://blog.mag2.com/m/log/0000015670/15143023.html

localのサンプル

$word = "晴れ";
&today;

sub today {
     local $word = "雨";
     &yesterday;
     print "今日は$wordです。\n";
}

sub yesterday {
     print "昨日は$wordでした。\n";
}

<実行結果>
昨日は雨でした。
今日は雨です。  
http://www.kent-web.com/perl/chap8.html

myのサンプル

$word = "晴れ";
&today;

sub today {
     my $word = "雨";
     &yesterday;
     print "今日は$wordです。\n";
}

sub yesterday {
     print "昨日は$wordでした。\n";
}

<実行結果>
昨日は晴れでした。
今日は雨です。  
http://www.kent-web.com/perl/chap8.html