my %lookup = do { my $i = 1; map { $_ => $i++ } qw( S M L XL ); }; my @sorted_values = map { $_->[0] } sort { $a->[2] cmp $b->[2] || $lookup{$a->[1]} <=> $lookup{$b->[1]} } map { my ($x, $y) = /\w+:\s(\w+),\s\w+:\s(\w+)/; [ $_, $x, $y ] } @strings;