use strict; use Data::Dumper; my @data; while () { chomp; push @data, [ split '\s', $_ ]; } @data = sort { $a->[1] <=> $b->[1] or $a->[2] <=> $b->[2] } @data; print Dumper \@data; __DATA__ A 00006360 A001002002 000000000.00 A 00006360 A001012012 000000000.00 A 00006360 A001054054 000000000.00 A 00005460 A001102002 000000000.00 A 00007360 A003015015 000000000.00 #### while () { chomp; push @data, [ split '\s', $_ ]; $data[ -1 ][ 2 ] = substr( $data[ -1 ][ 2 ], 1 ); } #### @data = sort { $a->[1] <=> $b->[1] or substr( $a->[2], 1) <=> substr( $b->[2], 1) } @data;