use strict; use warnings; my $rhDataStruct = { q{URIBL_OB_SURBL+MPART_ALT_DIFF_COUNT} => { Total => 10, Value => 3.716 }, q{BAYES_00+FORGED_RCVD_HELO} => { Total => 5, Value => -2.464 }, q{BAYES_00+HTML_LINK_PUSH_HERE} => { Total => 1, Value => -2.202 }, q{SPF_HELO_PASS} => { Total => 16, Value => -0.001 }, q{BAYES_95+HTML_MIME_NO_HTML_TAG} => { Total => 1, Value => 4.082 } }; sub makeSorter { my $rhToSort = shift; my $sortType = shift || q{}; if ($sortType eq q{t}) { return sub { return sort { $rhToSort->{$a}->{Total} <=> $rhToSort->{$b}->{Total} } keys %$rhToSort; }; } elsif ($sortType eq q{v}) { return sub { return sort { $rhToSort->{$a}->{Value} <=> $rhToSort->{$b}->{Value} } keys %$rhToSort; }; } else { return sub { return sort keys %$rhToSort; }; } }