На самом деле есть очень веская причина использовать my
в этом примере.
Вы действительно хотите, чтобы переменная создавалась каждый раз при выполнении подпрограммы, в противном случае вы бы изменили значениячто вы получили ранее.
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
Обратите внимание, что каждая копия @array
идентична.
Именно поэтому вам нужна новая копия для каждого раза, когда подпрограмманазывается.
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