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 ) ) { ... }