No such thing as a small change 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; }

Create A New User
Node Status?
node history
Node Type: note [id://525317]
help
Chatterbox?
 [LanX]: perl -d script.pl [LanX]: perlrun [LanX]: perldb Discipulus redescovered Perl Development Tools

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2018-05-25 18:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
World peace can best be achieved by:

Results (190 votes). Check out past polls.

Notices?