@sorted = sort { my @a = $a =~ /^(.+?)(\d+)#(\d+)$/; my @b = $b =~ /^(.+?)(\d+)#(\d+)$/; $a[1] <=> $b[1] or $a[2] <=> $b[2] or $a[0] cmp $b[0] } @unsorted;