Wake me up when golang can do this:
for my $v (
sort { ${$hash}{$a}{'name'} &lt;=&gt; ${$hash}{$b}{'name'} }  
sort { lc(${hash}{$a}{'name'}) cmp lc(${$hash}{$b}{'name'}) }
grep { !/^order$/ } keys %{$hash}) { ... }

(May not run due to having changed variable names on the fly)