perl5.8.9で下のように書いたスクリプトがなぜか死なずに実行される。仕様なのかわからないし、他のバージョンだと動作がおかしくなっちゃうのかどうかもわからないので、だれか分かる人がいたら教えて欲しいです。。。
追記
twitter上で教えていただきました。id:gfxさんありがとうございます!
autovivificationは罠ですね。 $ perl -wE 'my $foo; $foo->[0]++; say $foo' # ARRAY(...)
2011-02-16 14:17:20 via web
あー @{$foo} はautovivifyされたりされなかったりするな。lvalueだとautovivifyされるように見えるが、forがなぜ特別扱いなのかよく分からない。
2011-02-16 14:24:28 via web
基本的には、lvalueとして扱うとautovivifyされる。e.g. @{$foo} = (); push @{$foo}; / lvalue以外だとautovivifyされずstrict "refs"で死亡。forは単に実装上の都合でlvalue扱いなだけだと思う。
2011-02-16 14:33:20 via web