Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^2: check if 2 values are equal

by eXile (Priest)
on Jan 24, 2006 at 21:18 UTC ( #525317=note: print w/ replies, xml ) Need Help??


in reply to Re: check if 2 values are equal
in thread check if 2 values are equal

thanks very much, this does what i'd like it to do, and if i compare it to my orginal function it even takes care of the 'numeric 0' vs. 'empty string' inequality.

my @vals = (undef, 0, '0', 'aap', 1, 't',''); my @expl = ('undef','numeric 0','string 0', 'string "aap"', 'nu +mber 1', 'string t','empty string'); my ($i,$j); for ($i=0; $i <= scalar(@vals-1); $i++) { for ($j=0; $j <= scalar(@vals-1); $j++) { # equals 1 print "equals_org '$expl[$i]'\t'$expl[$j]'\t" . equals_org($va +ls[$i],$vals[$j]) . "\n"; print "equals_new '$expl[$i]'\t'$expl[$j]'\t" . equals_new($va +ls[$i],$vals[$j]) . "\n"; print "--\n"; } } sub equals_org { my ($val1, $val2) = @_; # first test for undef-ness if ( ! defined $val1 || ! defined $val2 ) { return 1 if (! defined $val1 && ! defined $val2 ); return undef; #case one is undef, other is def } # have to do next line this because strings evaluate to 0 in == co +ntext ... if ( ! $val1 && ! $val2 ) { # then test for ""-ness return 1 if ( ($val1 eq "") && ($val2 eq "") ); return undef if ( $val1 eq "" || $val1 eq "" ); #case one is "" other is 0 # then test for 0-ness return 1 if ( ($val1 == 0) && ($val2 == 0) ); } # then test for equality using 'eq' return 1 if ( $val1 eq $val2 ); # then test for equality using '==' if ( int($val1) && int($val2) ) { # all other number cases are already covered by # above tests (eg. both 0, or both the same string) # this merely takes care of cases like: # 1000.0000 == 1000 return 1 if ( $val1 == $val2 ); } # couldn't find any, so i guess they are not equal return undef; } sub equals_new { my ($lhs, $rhs) = @_; #False if mix of defined and undef return 0 if defined $lhs != defined $rhs; # True if both undef return 1 if ! defined $lhs && ! defined $rhs; # False if different as numbers no warnings "numeric"; return 0 if (0 + $lhs) != (0 + $rhs); # False if different as strings return 0 if ('' . $lhs) ne ('' . $rhs); return 1; }


Comment on Re^2: check if 2 values are equal
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://525317]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (5)
As of 2014-12-21 01:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (101 votes), past polls