for ( sort { $a->[1] cmp $b->[1] or $a->[0] cmp $b->[0] } map { [ /^(.*?) (\S*?) ([ 0-9]*)$/ ] } @lines ) { print "@$_\n"; }