Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re^3: Comparing Hash key with array

by Riales (Hermit)
on Feb 02, 2012 at 17:32 UTC ( #951501=note: print w/replies, xml ) Need Help??

in reply to Re^2: Comparing Hash key with array
in thread Comparing Hash key with array

This should work:

use Data::Dumper; my @lines = ( ['_W9C2JJDCB', 'asdf1', 'zxcv1', ], ['_W9C2JJDCB', 'asdf2', 'zxcv2', ], ['_W9C2JJDCB', 'asdf3', 'zxcv3', ], ); my %hash = ( '_W9C2JJDCB' => [ '_W92CJJDCB', '201200240', 'TEST: IGNORE', 'John Doe', 'Closed', 'HIP', '', '', ], ); foreach my $key (keys %hash) { foreach my $line (@lines) { if ($line->[0] eq $key) { shift @$line; push @{$hash{$key}}, @$line; } } } die Dumper(%hash);

I don't know what your input data looks like, but may I suggest iterating through @lines instead of keys %hash in the outer loop? This way, you can use the hash's look-up to check if there's a match. Your way is better if there's a massive amount of data in @lines that doesn't have a match in %hash though. Let me know if you'd like some help with the other way!


You should definitely iterate through @lines first no matter what; it's far more efficient:

foreach my $line (@lines) { my $key = shift @$line; if (exists($hash{$key})) { push @{$hash{$key}}, @$line; } }

Replies are listed 'Best First'.
Re^4: Comparing Hash key with array
by packetstormer (Monk) on Feb 02, 2012 at 17:43 UTC

    Excellent! Thanks, that works as I want.
    It turns out my original code, albeit verbose, almost works when I change that "==" to "eq". One of those things were you can't see the wood for the trees!

    Thanks for the tip regarding iterating through @lines. There will be an huge amount of data in there when it goes live.

    Thanks again

      Glad that worked for you! I just wanted to make sure you saw my edit--your code will run far faster if you iterate through @lines first.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://951501]
and monks are getting baked in the sun...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (6)
As of 2018-05-24 10:48 GMT
Find Nodes?
    Voting Booth?