in reply to
Read Only Error -- Sorting an Array
Because the leading digits are '0' padded, you can take advantage of that fact. They can be sorted by a simple lexical sort. Just another approach, but a simpler one. :-)
map creates an anonymous array reference filled with the fields that have been split and assigned to the array reference. Because you sort the file lines, @sorted collects array references in sorted order;
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @sorted = map [ split /[()\s]+/ ], sort <DATA>;
print Dumper \@sorted;
__DATA__
00000(IDR) 86480 22 41.435 40.696 40.728167 0 FRM 3
00015( B ) 9312 24 45.460 43.808 42.001 409 208 FRM 0
00002( P ) 35248 24 38.568 39.327 40.641 253 53 FRM 2
Output was:
$VAR1 = [
[
'00000',
'IDR',
'86480',
'22',
'41.435',
'40.696',
'40.728167',
'0',
'FRM',
'3'
],
[
'00002',
'P',
'35248',
'24',
'38.568',
'39.327',
'40.641',
'253',
'53',
'FRM',
'2'
],
[
'00015',
'B',
'9312',
'24',
'45.460',
'43.808',
'42.001',
'409',
'208',
'FRM',
'0'
]
];
Update: Since the you have tabs, perhaps you are dealing with tab separated data, so perhaps a simple
split /\t/ would do. If you wanted to get the values in the parentheses, you could easily extract them later. Just a thought. The change would be:
my @sorted = map{chomp; [ split /\t/ ]} sort <DATA>;