{ my (%country, %state, %msaname); sub do_msalist { my @msakeys = @_; foreach(sort by_americentric @msakeys) { #... } } sub by_americentric { $country{$b} cmp $country{$a} or $state{$a} cmp $state{$b} or $msaname{$a} cmp $msaname{$b} or $a <=> $b; } } #### sub do_msalist { my @msakeys = @_; foreach(sort { $country{$b} cmp $country{$a} or $state{$a} cmp $state{$b} or $msaname{$a} cmp $msaname{$b} or $a <=> $b; } @msakeys) { #... } }