Dearest Monks, your assistance is requested. In dealing with several large hashes for a possible up and coming feature for a website, I need to merge a couple of large HASHes. And I'd like an efficient way to do it. Basically, I want to take two or more hashes, and quickly get back an array of items common to the two (or more). Should be easy right?

Now, I could do it iteratively, like this:
my @common; push @common, $_ if($$bar{$_}) foreach(keys(%$foo));


Sure sure, that's great. I can grab each hash and run it through this operation. It can be optimized it by putting whichever hash has fewer keys as $foo, sure, but I really feel that I'm not taking advantage to any sort of internal organization that the hashes may have. Is there some sort of lower level operation that will give me an array (or whatever), that's common to two (or more) of them, without destroying any of the hashes.

I've looked pretty throughly on perlfunc, and have turned up short. Is there a way to speed up this mass comparison? Would destruction of the arrays help? Thanks for your time. I hope I'm not missing anything major. Ideally, i'd love:
my @foo = commonkeys($foo, $bar, $splat, $woo, ...);


Anything you guys can think of that isn't in the vein of my current approach? Thanks for your time gentle monks. Searching for cycles, --jaybonci

In reply to Faster Common Hash key hunt by JayBonci

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.