If you use a hash to hold different sort functions, then you can call that function from inside the sort block. There are probably better ways to do this, but this works.
#!/usr/bin/perl
use strict;
use warnings;
my $test = shift;
my $sort = {
'numbers' => sub { $_[0] <=> $_[1] },
'letters' => sub { "$_[0]" cmp "$_[1]" },
};
my @test = qw/1 2 3 4 a b 0 10 9 100/;
print sort {$sort->{$test}->($a,$b)} @test;
If you run this perl sort_test.pl letters it will use the cmp and if you run perl sort_test.pl numbers it will sort using <=>