Eric Walker wrote:

> I have a check I am doing with a hash.
> 
> if (exists $deref{$drcrule})
> 
> 
> This check fails as if the keyvalue is a part of the hash, but when I
> print out the keys like this
> foreach my $item (%{$deref}){
>   print "$item\n";
> }
> 
> And it is not in the list.  I ran this on a previous data that had this
> in the hash, does perl not clean the address space.  Is it possible for
> this data to be lingering from that last run?

your check:

if(exists $deref{$drcrule})

is asking if $drcrule exists in %deref (the hash) but here when you said:

foreach my $item (%{$deref}){
        print "$item\n";
}

you are printing out the keys and values of $deref (the hash reference). 
remember:

%deref = (a => 1,b => 2); #-- hash
$deref = {c => 1,d => 2}; #-- hash reference

create 2 different variables. your check should probably be:

if(exists $deref->{$drcrule}){
        #-- ... code ...
}

example:

#!/usr/bin/perl

my $stuff = {a => 1, b => 2};

if(exists $stuff{a}){
        print "a is there\n";
}else{
        print "a is not there\n";
}

clearly a is in there but it prints:

a is not there

do you have 'use strict'? if you have, Perl will complain:

Global symbol "%stuff" requires explicit package name at tmp.pl line 7.
Execution of tmp.pl aborted due to compilation errors.

which tells you there is "bug" in your program. save you a lot of time. 
learn to 'use strict' and 'use warnings' :-)

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to