http://www.perlmonks.org?node_id=601938


in reply to Hash assignments using map

In addition to what others have said, you could do:
my @to_keep = (...); my %keepers; @keepers{@to_keep} = ();
which you would then test with exists $keepers{$x}. Althought I'm curious why you need the %keepers hash if you have the @to_keep array.

Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Replies are listed 'Best First'.
Re^2: Hash assignments using map
by njcodewarrior (Pilgrim) on Feb 25, 2007 at 02:52 UTC

    Hi japhy

    Not to beat a dead horse here, but to answer your question:

    I'm checking the keys in another hash against those in %keepers. If a keys exists in this other hash, but NOT in %keepers, I want to eliminate it from the hash. See this node for further explanation.

    Anyways, thanks for the clarification

    njcodewarrior

      Right. My point is, why not loop over the elements in @keepers, rather than the keys of the other hash?
      my %big_hash = (...); my @to_keep = ('abc', 'xyz'); %big_hash = map { exists($big_hash{$_}) ? ($_ => $big_hash{$_}) : () } + @to_keep; # or %big_hash = map { $_ => $big_hash{$_} } grep { exists $big_hash{$_} } +@to_keep;

      Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
      How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart