# 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;