my %sortfkt = (
"item" => \&numerical,
"name" => \&string,
"age" => \&numerical,
"height" => \&numerical,
);
####
sub string {
return $_[0] cmp $_[1];
}
sub numerical {
return $_[0] <=> $_[1];
}
####
sort { &{$sortfkt{$orderby}}($hash{$a}{$orderby}, $hash{$b}{$orderby}) } keys %hash
####
#!/usr/bin/perl
use strict;
use warnings;
my %sortfkt = (
"item" => \&numerical,
"name" => \&string,
"age" => \&numerical,
"height" => \&numerical,
);
my %item1 = (
"item" => 1,
"name" => "smith, john",
"age" => 25,
"height" => 1.80
);
my %item2 = (
"item" => 2,
"name" => "jones, bob",
"age" => 26,
"height" => 1.70
);
my %item3 = (
"item" => 3,
"name" => "arrang, eliee",
"age" => 27,
"height" => 1.75
);
my %hash;
$hash{1} = { %item1 };
$hash{2} = { %item2 };
$hash{3} = { %item3 };
my $orderby = "name";
foreach my $id (sort { &{$sortfkt{$orderby}}($hash{$a}{$orderby}, $hash{$b}{$orderby}) } keys %hash) {
print "$hash{$id}{'item'} - $hash{$id}{$orderby}\n";
} # end-foreach
sub string {
return $_[0] cmp $_[1];
}
sub numerical {
return $_[0] <=> $_[1];
}