#!/usr/bin/perl use strict; use warnings; my %hoh = ( bar => {value => 42}, baz => {value => 199}, foo => {value => 3}, ); my $joe = shift @ARGV; my $sortfunctions = { numbers => sub { $hoh{$a}{value} <=> $hoh{$b}{value} }, letters => sub { $hoh{$a}{value} cmp $hoh{$b}{value} }, }; my $sortfunc = $sortfunctions->{$joe}; foreach my $key (sort $sortfunc keys %hoh) { print "$key: $hoh{$key}{value}\n"; } __END__ $ ./818578.pl letters baz: 199 foo: 3 bar: 42 $ ./818578.pl numbers foo: 3 bar: 42 baz: 199