実際には、この例ではmy
を使用する非常に良い理由があります。
実際には、サブルーチンで毎回変数を再作成する必要があります。そうしないと、以前に取得した値が変更されます。 @array
のすべてのコピーが同一であるか
use strict;
use warnings;
use 5.10.1;
my @array;
sub A{
push @array, scalar @array; # add the length of @array to the end
return \@array;
}
my @list;
for('A'..'D'){
my $current = A();
push @list, $current;
say join ' ', @$current;
}
say '';
say join ' ', @$_ for @list;
0
0 1
0 1 2
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
注意してください。
この理由から、サブルーチンが呼び出されるたびに新しいコピーが必要です。
use strict;
use warnings;
use 5.10.1;
sub A{
state $iter = 0;
my @array;
push @array, 0..$iter++;
return \@array;
}
my @list;
for('A'..'D'){
my $current = A();
push @list, $current;
say join ' ', @$current;
}
say '';
say join ' ', @$_ for @list;
0
0 1
0 1 2
0 1 2 3
0
0 1
0 1 2
0 1 2 3