#!/usr/bin/perl -w use strict; my @data = ( { name => 'jim', age => 16 }, { name => 'bob', age => 18 }, ); sub sort_me { my $field = shift; if ($field eq "name") { return sub { $a->{$field} cmp $b->{$field} }; } else { return sub { $a->{$field} <=> $b->{$field} }; } } my @sorted; my $type = sort_me("name"); @sorted = sort $type @data; $type = sort_me("age"); @sorted = sort $type @data;