The stupid question is the question not asked PerlMonks

### Re^2: if (\$2) behaves differently than if (defined \$2)

 on Apr 15, 2008 at 18:09 UTC ( #680611=note: print w/ replies, xml ) Need Help??

That's a choice quote. Put another way, the OP is suffering from some confusion that if (defined \$x) is intended to be the same as if (\$x). In fact, they serve different purposes.

defined tests whether a variable has any value -- a false value is still a value.

Short demonstration code:

```my \$x;
demonstrate();

\$x = 1;
demonstrate();

\$x = 0;
demonstrate();

sub demonstrate {
if (defined \$x) { print "\\$x has value \$x\n"; }
else { print "\\$x is undefined\n"; }

if (\$x) { print "\\$x evaluates as TRUE\n"; }
else { print "\\$x evaluates as FALSE\n"; }

print "\n";
}

This produces the following output:

```\$x is undefined
\$x evaluates as FALSE

\$x has value 1
\$x evaluates as TRUE

\$x has value 0
\$x evaluates as FALSE
Ramblings and references
The Code that can be seen is not the true Code
I haven't found a problem yet that can't be solved by a well-placed trebuchet

Comment on Re^2: if (\$2) behaves differently than if (defined \$2)
Replies are listed 'Best First'.
Re^3: if (\$2) behaves differently than if (defined \$2)
by repellent (Priest) on Apr 16, 2008 at 16:57 UTC
Apparently, in Lisp, this is referred to as a semi-predicate problem.

The very fact that you are using
```    if (\$2)
followed by
```    \$price = \$1 . "." . \$2
shows that you are using \$2 as a semi-predicate, i.e. to show validity and to hold value.

Next time, whenever you use if (\$var), you should consider if \$var needs to be a full-predicate, i.e. strictly a boolean to only show true-or-false.

Create A New User
Node Status?
node history
Node Type: note [id://680611]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (14)
As of 2015-11-30 17:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?