You want to change your sort to
my @a = $a =~ /(\D+)(\d+)?/;
my @b = $b =~ /(\D+)(\d+)?/;
$a cmp $b ||
($a || 0) <=> ($b || 0)
Right now, your regex will fail to provide anything in @a/@b if there aren't any numbers.
Being right, does not endow the right to be rude; politeness costs nothing.
Being unknowing, is not the same as being stupid.
Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.