use warnings; use diagnostics; use strict; my @array = ("8.foo", "6.bar", "7.baz", "5.biz", "3.fizzle", "0.fro", "9.boz"); print join "\n", sort {by_number($a) <=> by_number($b)} @array; sub by_number { my $value = shift; if ($value =~ m/^(\d+)/) { return $1 } }