最近、やっと普通に Perl が書けるようになってきた
やっとね。
しかし、「書ける」と「分かる」とは違う
まだまだ Perl のこと分かってないな。
ということで、
Perl の分からないところをいろいろと考察してみようと
でも、
以下のような感じのソースも見かけたことがあるので、グローバル変数ということではなさそう。
sub piyo { my $c = shift; my $code = shift; local $c->{hoge} = 'fuga'; $code->(); }
グローバルじゃなくてもいいということは、
これは?
sub piyo { my $self = shift; local $self = bless {}, 'Hoge'; }
Can't localize lexical variable $self
なるほど、my が付いてるとダメなんだ
たぶん分かった
自分の言葉でなんとなくだけど、
local ってやると、そこに書いてある参照のチェーンみたいなものを変えることが出来るんだ。
local $a->{a};
これだったら、$a が持ってる {a} のポインタを変える。
local $a;
これだったら、*{package::a} が持ってる $a のポインタを変える。
my $a; local $a;
これだったら、lexical スコープが持ってる $a のポインタを変えようとするんだけど、それは出来ないらしい。←意味がないのは分かるけど何で出来ないのかよくわからん
local *a;
これだったら、グローバルオブジェクトみたいなものがもってる、*a のポインタを変える。
これであってるのかな?
謎