in reply to How best to compare hash values?

Here's my attempt at an answer. Personally speaking, I love hashes. You just have to be aware of the limitations of which approach you take (array vs. hash).

I created a sub "isNull" as a homegrown replacement for "exists". The idea is to check your assumptions (and data) before you operate on that data.

#!/usr/bin/perl -w use strict; sub keyExists; # Begin Main my %hash1 = (); # Initialize empty hash. Perhaps unnecessary? %hash1 = ( "1", "20", "2", "20", "4", "19", "5", "20", "10", "20", "6", "18"); my %hash2 = (); # Initialize empty hash. Perhaps unnecessary? %hash2 = ( "1", "19", "2", "20", "4", "16", "5", "19", "6", "20"); foreach my $thisKey (sort keys %hash1) { # Check whether key from hash2 returns null to protect from undefi +ned key for hash2 if (isNull(\%hash2, $thisKey)) { print "hash2 contains null value for key: $thisKey", "\n"; } else { my $result = $hash1{$thisKey} - $hash2{$thisKey}; print "$thisKey $hash1{$thisKey} minus $hash2{$thisKey} equals + $result", "\n"; } } # End foreach exit 0; # End Main sub isNull { my $hashref = shift; # Reference to hash my $key = shift; # key to check my $rc = 0; if ($hashref->{$key}) { $rc = 0; # Hash returns non-null value } else { $rc = 1; # Hash returns Null value } return $rc; } # End sub isNull

Replies are listed 'Best First'.
Re^2: How best to compare hash values?
by toolic (Bishop) on May 06, 2010 at 16:44 UTC
    my %hash1 = (); # Initialize empty hash. Perhaps unnecessary?
    Yes, this is unnecessary. Either:
    my %hash1;

    or:

    my %hash1 = ( "1", "20", "2", "20", "4", "19", "5", "20", "10", "20", "6", "18");

    Fat commas are nice too: 1 => 20,

    I created a sub "isNull" as a homegrown replacement for "exists". The idea is to check your assumptions (and data) before you operate on that data.
    Your isNull sub is not need with your data. Try:
    unless ($hash2{$thisKey}) {

    instead of:

    if (isNull(\%hash2, $thisKey)) {

      Thanks for the additional code and such guys. I've come to see there's quite a few different ways of accomplishing the same thing!

      I'm working with arrays now rather than hashes, and a mis-coding on my part showed that I may not even need arrays for some thimgs, simple variables seem to capture the data too!

      I'm working now on capturing output from different short scripts, and it seems that rather than call other scripts, its best to do everything possible from a single perl script. Using strict and warnings is forcing me to do a fair amount of reading, which is helpful. Thanks again to everyone!

        Check out Net::SSH::Expect or Net::Telnet to poll your radios.