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


in reply to iterating hash keys?

What have you already tried? Also, have a look through this: How do I post a question effectively?

Replies are listed 'Best First'.
Re^2: using hashes
by R56 (Sexton) on Sep 26, 2013 at 15:08 UTC

    Something like this: (assuming @lines as the array that has the input)

    for my $line (@lines) { while(my ($find, $replace) = each %ids) { s/$find/$replace/g } }
      This should work, and is clear to read. While it is not optimally efficient, efficiency shouldn't be your concern at this stage. If this isn't working, you need to post more information about your actual script. Posting real input, expected output, and actual code (all wrapped in <code> tags) will greatly facilitate the debugging. As discussed in How do I post a question effectively?.

      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

        It's only partially working, because it's not matching exactly the 'pattern-key'.

        Supposing I have both banana AND bananas, being two different names and banana having an ID of 25, he's translating like:

        25

        25s

        I'm guessing the [] exact match operator doesn't work on these cases?

      For an effective solution to your problem, see BrowserUK's comment below. As to why the code you've shown doesn't work, it's probably because you're storing each line of your file/array in $line, but doing your substitution against $_. Try this: $line =~ s/$find/$replace/g.

        Thanks arrestee, that suggestion did some of the trick, but still having the 'exact match' problem that I replied to Kenneth on top...