use strict; use warnings; my @array = qw(a1 a10 a100 a11 b2 b10 b200 b25); print 'bobf sort: ', join ' ', sort @array; print "\n GF sort: ", join ' ', sort alfNum @array; sub alfNum { my ($aAlf, $aNum) = $a =~ /([a-z]+)(\d+)/i; my ($bAlf, $bNum) = $b =~ /([a-z]+)(\d+)/i; return $aAlf cmp $bAlf if $aAlf ne $bAlf; return $aNum <=> $bNum; }