w8lle has asked for the wisdom of the Perl Monks concerning the following question:
Hi Monks!
I am running Perl v5.10.0 (built for x86_64-linux-thread-multi) and I have an issue with the "defined" function. I am not sure this is actually a fault, but it have worked in previously releases (unfortunately I don't know which).
The issue seems to happen when I've got a defined variable without a value, e.g. $var1 = "".
If I need to check if (one of) two variables are defined, I need to do that like this:
if (defined $var1 || defined $var2) if (defined $var1 && defined $var2)
While I've previously been able to do it like this:
if (defined ($var1 || $var2)) if (defined ($var1 && $var2))
Running the following fails for both OR and AND (test 1 and 3):
./test.pl "" Test 1: NOK Test 2: OK Test 3: OK Test 4: NOK
When test.pl contains:
#!/usr/bin/perl use strict; use warnings; for my $i (1 .. 4) { my $result = (&successfulValidation ($i))? "OK": "NOK"; print "Test ", $i, ": ", $result, "\n"; } sub successfulValidation { my $test = shift; if ($test == 1) { return defined ($ARGV[0] || $ARGV[1]); } elsif ($test == 2) { return defined $ARGV[0] || defined $ARGV[1]; } elsif ($test == 3) { return defined ($ARGV[0] && $ARGV[1]); } elsif ($test == 4) { return defined $ARGV[0] && defined $ARGV[1]; } }
The following works just fine, though, so maybe the first (and only) variable to check can't be empty!?
./test.pl "" ""Is it a bug that test 1 and test 3 fail? I mean, test 1 should have returned TRUE ($ARGV[0] was defined, although with an empty value) and test 3 should have returned "FALSE" ($ARGV[1] wasn't defined)? Maybe I am using "defined" in the wrong way!?
Many thanks in advance,
/Johan
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: "defined" function fails to evaluate expression; feature or fault?
by stevieb (Canon) on Jan 26, 2017 at 20:50 UTC | |
by AnomalousMonk (Archbishop) on Jan 26, 2017 at 21:08 UTC | |
by haukex (Archbishop) on Jan 27, 2017 at 07:44 UTC | |
by stevieb (Canon) on Jan 26, 2017 at 21:13 UTC | |
|
Re: "defined" function fails to evaluate expression; feature or fault? (truth)
by Anonymous Monk on Jan 26, 2017 at 20:35 UTC | |
|
Re: "defined" function fails to evaluate expression; feature or fault?
by w8lle (Novice) on Jan 27, 2017 at 06:07 UTC |