Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

自動生成で少しはまる

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 = [];