Трудно сказать, имели ли вы в виду это или нет, но причина, по которой вы получаете ссылки на массивы, заключается в том, что вы не печатаете то, что вы думаете.
Вы начали правильно, перебирая 'строки' @data
с помощью:
foreach my $line (@data) { ... }
Однако следующая строка запрещена. Кажется, что вы путаете текстовые строки со структурой массива. Да, каждая строка содержит строки, но Perl рассматривает @data
как массив, а не строку.
split
используется для преобразования строк в массивы. Он не работает с массивами! То же самое относится и к chomp
(с несущественным исключением).
Вам нужно заменить содержимое цикла foreach
на следующее:
foreach my $line (@data) {
print $line->[0].", ".$line->[1].", ".$line->[2]."\n";
}
Вы заметите обозначение ->
, которое есть по причине. $line
относится к массиву. Это не сам массив. Стрелки ->
обращаются к массиву, позволяя получить доступ к отдельным элементам массива, на которые ссылается $line
.
Если вам не нравится идея делать стрелки с помощью стрелок (а большинство новичков обычно этого не делают), вы можете создать временный массив, как показано ниже, и использовать его вместо этого.
foreach my $line (@data) {
my @random = @{ $line };
print $random[0].", ".$random[1].", ".$random[2]."\n";
}
OUTPUT
1_TEST, 1_T, 1_TESTER
2_TEST, 2_T, 2_TESTER
3_TEST, 3_T, 3_TESTER
4_TEST, 4_T, 4_TESTER
5_TEST, 5_T, 5_TESTER
6_TEST, 6_T, ^_TESTER
Однострочник может выглядеть примерно так: print "@$_\n" for @data;
(что немного OTT), но если вы хотите просто напечатать массив, чтобы посмотреть, как он выглядит (скажем, в целях отладки), я бы порекомендовал использовать модуль Data::Dump
, который довольно красиво печатает массивы и хэши, не беспокоясь об этом.
Просто поставьте use Data::Dump 'dump';
в начале вашего скрипта, а затем dump @data;
. Так просто!