sort { ($a =~ /(\d+)/)[0] <=> ($b =~ /(\d+)/)[0] } sort { ($a =~ /\d+/g)[0] <=> ($b =~ /\d+/g)[0] } sort { (split /;/, $a)[0] <=> (split /;/, $b)[0] } #### # ST my @sorted = map $_->[1], sort { $a->[0] <=> $b->[0] } map [ (split /;/)[0], $_], @lines; # OM use Syntax::Construct qw{ // }; my %cache; my @sorted = sort { $cache{$a} //= (split /;/, $a)[0] <=> $cache{$b} //= (split /;/, $b)[0] } @lines; #### sort { $a <=> $b } @lines