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