local our $hoge;
ブームに乗るぞ!かなり適当。
ourはstrict使用時にグローバル変数を使えるようにする宣言と覚えると楽。
だってほら、use strictしてるとグローバル変数つかえないだしょ?
いちいち$Foo::Bar::bazとかパッケージ明示して書くのも面倒だし。
そこでour $bazですよ。
localはグローバル変数(もしくはハッシュの一部)を一時的に変更する宣言。
なにが便利かっていうとスコープ抜けたら元の値に戻ることが保障されてるってところか。
そーゆー処理を自分で実装しようとするとかなり面倒だモンね。
my $hash = { hoge => 1 }; { my $temp = $hash->{hoge}; $hash->{hoge} = 10; eval { hogehoge(); }; if ($@) { $hash->{hoge} = $temp; die $@; } $hash->{hoge} = $temp; }
こーんな処理が
my $hash = { hoge => 1 }; { local $hash->{hoge} = 10; hogehoge(); }
こー書けちゃうわけですから。
使わない手はない。
# ちなみに上記処理はlocalの挙動の例を示しただけなので処理としては何の意味も無い
これらを理解したならタイトルの「local our $hoge」がなぜ正しいか納得いくでしょ?
myは(ry