frobnitz( $HoA{Foo} ) if $HoA{Foo}; for my $key ( keys %HoA ) { frobnitz( $HoA{$key} ) if $key ne "Foo"; } #### my %HoA= ( D=>[4], E=>[5], F=>[6], Foo=>[3], G=>[7], H=>[8], ); { local( $HoA{Foo} )= $HoA{Foo}; for my $av ( delete $HoA{Foo}, values %HoA ) { print $av->[0], $/ if $av; } } print $HoA{Foo}[0], $/; #### sub FirstIfKeys { my $hv= pop @_; my %k; @k{ keys %$hv }= (1) x @k; my @k; for my $key ( @_ ) { push @k, $key if delete $k{$key}; } return @k, keys %k; } for my $key ( FirstIfKeys( "Foo", \%HoA ) ) { ... }