Perlのourってなんだろう

30分プログラム、その560。Perlのourってなんだろう?
研究室配属でPerl Mongerと噂の人が入ってきたので、適当なPerlコードを書いてるとバカにされかねない! というわけで、ちょっとマジメにPerlを勉強しよう。

まずは、ずっと疑問だったourについて調べてみよう。myは静的スコープの変数を、localは動的スコープの変数を宣言するのは知っているけど、残り一つのourが何なのかよく分からない。

先に結論を書いてしまうと、use strictを使いつつグローバル変数を宣言するために使うらしい。普通じゃん。

my

myは静的スコープの変数を宣言する。とても、よく見慣れたローカル変数の挙動。

my $x = 42;
{
    my $x = 0;
    print $x,"\n"; # => 0
}
print $x,"\n"; # => 42

local

localは動的スコープの変数を宣言する。正直、気持ち悪い挙動だけど、ある区間だけグローバル変数の値を変更するのに便利らしい。

$y=0;
sub print_y{
    print $y,"\n";
}


{
    local $y = 10;
    print_y(); # => 10
}
print_y(); # => 0

our

そして謎だったour。普通にグローバル変数だった。

our $z = 10;
{
    our $z = 42;
    print $z,"\n"; # => 42
}
print $z,"\n"; # => 42

結論

ourは、グローバル変数を宣言するのに使う。