配列内の要素undef自動補完
新しく配列を作成しただけだと、中身はもちろん何もないので要素数0。
use strict; use warnings; my @ary; print scalar(@ary), "\n"; #=> 0
この時に添字[10]には何が入っているかといえば、undefがある。
print $ary[10]; してみると、Use of uninitialized valueの警告が出る。
少なくともあるように見えるが、他の[0]〜[9]に変化はなく、要素数も変わらず0だ。
use strict; use warnings; use Data::Dumper; my @ary; print Dumper(\@ary), "\n"; #=> $VAR1 = []; print $ary[10],"\n"; #=> Use of uninitialized value in print at - line 7. #=> print Dumper($ary[10]), "\n"; #=> $VAR1 = undef; print Dumper(\@ary), "\n"; #=> $VAR1 = []; print scalar(@ary), "\n"; #=> 0
では、明示的に添字[10]にundefを入れてみる。
use strict; use warnings; use Data::Dumper; my @ary; print Dumper(\@ary), "\n"; #=> $VAR1 = []; $ary[10] = undef; # 明示的にundef代入 print Dumper(\@ary), "\n"; #=> $VAR1 = [ #=> undef, #=> undef, #=> undef, #=> undef, #=> undef, #=> undef, #=> undef, #=> undef, #=> undef, #=> undef, #=> undef #=> ]; print scalar(@ary), "\n"; #=> 11
このように、配列内の要素undef自動補完は、参照ではなく代入によって行われるようである。終わり。