Первое, что вам нужно сделать, это добавить это в ваш скрипт:
use strict;
use warnings;
Тогда вы получите предупреждение:
Global symbol "@thingy" requires explicit package name
Это означает, что @thingy
не определено. В perl $thingy
и @thingy
считаются отдельными переменными.
Другой способ создания вашего массива - использовать анонимные массивы, например:
push @array, [ split(/:/, 'X:Y:Z') ];
push @array, [ split(/:/, 'A:B:C') ];
...
Тогда вам не придется создавать одноразовые переменные. Или с файлом, подобным описанному вами (\t
- вкладка):
while (<>) {
push @array, [ split /\t/, $_ ];
}
Способ сортировки по нескольким столбцам из perlmonks:
my @a = ([1,2], [3,4]);
my @b = sort {
$a->[0] <=> $b->[0] || # the result is -1,0,1 ...
$a->[1] <=> $b->[1] # so [1] when [0] is same
} @a;
http://www.perlmonks.org/index.pl?node_id=674374
Конечно, это предполагает числовые значения в ваших полях. В противном случае используйте cmp
.
Для печати:
for my $ref (@array) {
my $i = 0;
for my $value (@$ref) {
print $value;
print "," if ($i++ < $#$ref); # comma delimited
}
print "\n"; # end of record
}