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は、グローバル変数を宣言するのに使う。