Если вы хотите просто напечатать массив, попробуйте следующий код:
foreach my $row (@array) {
foreach my $elem (@$row) {
print $elem; ## print elements without separator
}
print "\n"; ## new line after row
}
Если вам нужны индексы для какой-то цели, то мы идем:
for(my $row_i = 0; $row_i < @array; $row_i++) {
for(my $column_i = 0; $column_i < @{ $array[$row_i] }; $column_i++) {
print $array[$row_i][$column_i];
}
}
Идея состоит в том, что @array
в скалярном контексте возвращает количество элементов в массиве. И @{ $array[$row_i] }
немного сложнее. Это массив разыменования, хранящийся в $array[$row_i]
.
Обновление для подпрограммы:
В Perl вы можете передать массив по ссылке:
printarray(\@array); ## pass reference
sub printarray {
my $array_ref = shift; ## no copy created
foreach my $row (@$array_ref) { ## now we need to dereference
...
}
}
Вы также можете передать копию массива:
printarray(@array);
sub printarray {
my @array_copy = @_; ## store local copy of array
...
}
Для получения более подробной информации смотрите Как я могу передать / вернуть {Function, FileHandle, Array, Hash, Method, Regex}? Страница справочника.
И, пожалуйста, добавьте use strict;
в начале программы. Это заставит вас объявлять все переменные, но сэкономит кучу времени, если вы введете что-то неправильно.