Perl日記

PerlとかRubyとかPHPとかPythonとか

自動生成で少しはまる

Perlは変数に値を入れたとき、変数がなければ、その場で変数を作ってくれる。

$test = 'Hello'; # $testが作られる

これは配列リファレンス・ハッシュリファレンスも同じ感じでできる。

my $test;
$test->[0]->[9]->{TEST} = 'Hello';
# いきなりこう書いてもOK

で。
ならいきなりデリファレンスもできるだろうと思い込んでいたら見事にはまった。

use strict;

my $array_ref;

if (0) { # false
  push @$array_ref, 'Something';
}

if (@$array_ref) {
  # CODE
}

これ、$array_ref に何も入っていないと、エラーになる。

Can't use an undefined value as an ARRAY reference at - line 9.

ただし use strict refs; 状態でだけれど。
シンボリックリファレンスみたいになっちゃってるってことかな。


動かすなら、初期化で無名配列リファレンスを入れておけばok。

my $array_ref = [];