sub by_num { my($x,$y) = ($a =~ /(\d+)/, $b =~ /(\d+)/); return $x <=> $y; } sub by_abc { return $a cmp $b; } my $f = 'by_num'; my @args = qw/ foo1 bar2 baz3 /; print "$f - ", sort($f @args), $/; $f = 'by_abc'; print "$f - ", sort($f @args), $/; __output__ by_num - foo1bar2baz3 by_abc - bar2baz3foo1