Perl является очень выразительным языком. Вы можете сделать это все с заявлением ниже.
$self->{matrix} = [ map { [ (0) x $seq2 ] } 1..$seq1 ];
Это гольф? Возможно, но это также позволяет избежать взлома с привередливым push
прототипом Я взрываю утверждение ниже:
$self->{matrix} = [ # we want an array reference
map { # create a derivative list from the list you will pass it
[ (0) x $seq2 ] # another array reference, using the *repeat* operator
# in it's list form, thus creating a list of 0's as
# long as the value given by $seq2, to fill out the
# reference's values.
}
1..$seq1 # we're not using the indexes as anything more than
# control, so, use them base-1.
]; # a completed array of arrays.
У меня есть стандартная подпрограмма для создания таблиц:
sub make_matrix {
my ( $dim1, $dim2 ) = @_;
my @table = map { [ ( 0 ) x $dim2 ] } 1..$dim1;
return wantarray? @table : \@table;
}
А вот более обобщенная функция массива массивов:
sub multidimensional_array {
my $dim = shift;
return [ ( 0 ) x $dim ] unless @_; # edge case
my @table = map { scalar multidimensional_array( @_ ) } 1..$dim;
return wantarray ? @table : \@table;
}