SPUG: 0 == undef

Peter Darley pdarley at kinesis-cem.com
Wed Apr 7 14:00:51 CDT 2004

	Further examination shows that any non-numeric value==0, so I guess I'll
cook up an IsNumber() function and do if (IsNumber($Test1) &&
IsNumber($Test2) && $Test1==$Test2).  Or perhaps I'll make a function like
Equal($Test1, $Test2).  None of this will help with readability tho. :)
	Any idea why this is set up like this?
Peter Darley

-----Original Message-----
From: Tim Maher [mailto:tim at consultix-inc.com]
Sent: Wednesday, April 07, 2004 11:44 AM
To: Peter Darley
Subject: Re: SPUG: 0 == undef

On Wed, Apr 07, 2004 at 11:26:43AM -0700, Peter Darley wrote:
> Folks,
> 	I'm wondering if there's any way to get 0 to not equal undef.  When I do:
> my ($Test1, $Test2) = 0, undef;
> if ($Test1 == $Test2) {print "Crap!\n"}
> else {print "OK\n"}
> 	I find out that 0==undef.
> 	I'm also wondering what the thinking here is?
> Thanks,
> Peter Darley

When you use an undefined value in a numeric comparison,
Perl fudges in a 0 value for you (and gives you a warning,
if -w is enabled).

If you want to differentiate between undef values and
those with zero values, you should use the "defined" function.

my ($Test1, $Test2) = 0, undef;
if ( ! defined $Test1 or ! defined $Test2 ) {
	print "Sorry, can't compare numbers, at least one is
	undefined\n"; )
elsif ($Test1 == $Test2) {print "Equal!\n"}

| Tim Maher, Ph.D.                    tim(AT)teachmeperl.com |
| SPUG Leader Emeritus               spug(AT)teachmeperl.com |
| Seattle Perl Users Group        http://www.seattleperl.com |
| SPUG Wiki Site               http://spugwiki.perlocity.org |
| Perl Certification Site      http://perlcert.perlocity.org |

More information about the spug-list mailing list