perl ブロック内でのローカル変数

#ブロック内でのローカル変数の定義
$variable = "グローバル";

print "サブルーチン実行前: $variable\n";

#サブルーチン呼び出し
&block();
print "サブルーチン実行後: $variable\n";

#サブルーチン本体
sub block{
    my($variable) = "ローカル";
    print "\tブロック前: $variable\n";
    {
        my($variable) = "ブロック";
        print "\t\tブロック内: $variable\n";
    }
    print "\tブロック後: $variable\n";
}

#実行結果
# サブルーチン実行前: グローバル
# 	ブロック前: ローカル
# 		ブロック内: ブロック
# 	ブロック後: ローカル
# サブルーチン実行後: グローバル


#補足
# 変数が効果を持つ範囲を確認するため、同じ変数名で幾つかの変数を定
# 義している。はじめに、グローバル変数$variableを定義し、内容「グローバ
# ル」を表示する。次にblockサブルーチンを呼び出し、その中でmyで宣言した
# 変数$variableに「ローカル」を代入し、表示する。さらに{}で囲んだブロッ
# ク内でmyで宣言した変数$variableに「ブロック」を代入し表示する。{}の
# ブロックを抜けてから$variableの内容を表示するとブロックの前で代入した
# 「ローカル」が表示される。このことからmyで宣言した変数が、ブロックを抜
# けて無効になった事がわかる。最後に、blockサブルーチンを抜けた後で
# $variableの内容を表示するとサブルーチンを呼び出す前の$variableの内容
# 「グローバル」が表示される。このことからサブルーチン内でmyで宣言した変
# 数が、サブルーチンを抜けて無効になり、グローバル変数の内容が復活したこ
# とが分かる。

初めてのPerl 第6版

初めてのPerl 第6版