not sure why you assign to $_ here ...
>
$_ = [$1, $2, $_]
But I felt tempted to try a variation with named captures for clarity.
(tests borrowed from Hauke's post)
use strict;
use warnings;
use Data::Dump;
use Test::More;
my @in =
( "2bc", "1", "12c", "12", "21", "1", "1a", "2", "2", "2",
"2", "3", "35", "31", "2b", "4", "42", "5", "51", "2ac",
"52", "6", "7"
);
my @exp =
( "1", "2", "3", "4", "5", "6", "7", "12", "21", "31",
"35","42", "51", "52", "1a", "2ac", "2b", "2bc", "12c",
);
my %in;
@in{@in}=(); # unique
my @got =
map { $_->{orig} }
sort { $a->{alpha} cmp $b->{alpha} || $a->{num} <=> $b->{num} }
map { /(?<num>\d+)(?<alpha>[a-z]*)/; { orig => $_, %+ } }
keys %in;
is_deeply(\@exp,\@got) or ddx [\@exp,\@got];
done_testing;
|