Perl日記

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

配列内の要素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自動補完は、参照ではなく代入によって行われるようである。終わり。