スコープ付き変数宣言

スコープ付きで変数を宣言するには「my」の他に「our」と「local」が使えるそうです。
「our」は、ラクダ本を読んでも意味がよくわからなかったのですが、結局の所「グローバル変数を明示的に宣言・使用するための手段」という事でいいのでしょうか。

our $Fruit_Name = "an apple";
{
	our $Fruit_Name = "an orange";
	print "I like $Fruit_Name\n";
}
print "I love $Fruit_Name\n";

というコードを実行すると

I like an orange
I love an orange

が表示されます。コード3行目の「our $Global_Variable = "an orange";」は、「our」を省略しても全く同じように作用しますね。*1
「local」は、「値の変更」だけを局所化する、という意味ですね。スコープ内でlocal宣言した変数に対する変更は、そのスコープ内でのみ有効になります。さきほどのコードを少しいじるとわかりやすそうです。

our $Fruit_Name = "an apple";
{
	local $Fruit_Name = "an orange";
	print "I like $Fruit_Name\n";
}
print "I love $Fruit_Name\n";

変更点は3行目の「our」を「local」にしただけです。
これを実行すると

I like an orange
I love an apple

と、ブロックスコープの中でのグローバル変数に対する変更(an orange)が、スコープを出た途端に戻っています(an apple)。グローバル変数の値を一時的に変更したい時に便利ですね。(^_^)

*1:むしろ省略しないと「"our" variable $Global_Variable redeclared at global.pl line 3.」グローバル変数をour付きで再宣言してるよ、という警告が出てしまいました。