local宣言
よくわかっていないので、コードを書いてみる。
use strict; use warnings; our $var = 1; sub func() { $var = 2; print "in func: $var\n"; } func(); print "out of func: $var\n";
実行結果
in func: 2
out of func: 2
use strict; use warnings; our $var = 1; sub func() { local $var = 2; print "in func: $var\n"; } func(); print "out of func: $var\n";
実行結果
in func: 2
out of func: 1
なるほど。
local変数ではなく、local宣言なのですな。
宣言したグローバル変数に一時的な値を与えて、スコープの終わりにきたら破棄して元のグローバルな値を見る。
グローバル変数はヒープ領域に格納されているけど、そいつを見ずにスタック領域に入れて扱うということ?
(正確にPerlのメモリ理解してないから合ってないかも)
ちなみに、
use strict; use warnings; my $var = 1; sub func() { $var = 2; print "in func: $var\n"; } func(); print "out of func: $var\n";
実行結果
Can't localize lexical variable $var at local.pl
レキシカル変数はローカル宣言できないと言っている。
たしかにそうじゃないと、myの意味がないもんな。