今日のはまりどころ。

sub list_process{
  my ($name,$list) = @_;
  if(@$list > 0){
    die "no data\n";
  }else{
    foreach(@{$list || []}){
      # 適当な処理を行う  
    }
  }
}

my @list = ();
#
# (このあたりの処理で@listに適当にハッシュを詰めこむ)
#

my $name = "$list[0]{name}"; ## (1)
list_process($name,\@list); ## (2)

この処理のなかで、(2)のところで、@listの要素が空の場合、「no data」と出力して死ぬハズ。
と思ってたのだが、実際には、$list[0]に空のハッシュが必ず入っている。

ちなみに、

"$list[0]{'test'}";
"$list[1][3]";
# とすると、
[
  {},
  []
]

な配列ができるし、

"$list[100]{a}";

とすると、添字0から99まではundefで、100に空のハッシュが入った@listが出きる。
この副作用、わかりにくすぎ、、、