Re: Can you guess the result? Is it a bug?
by sauoq (Abbot) on Jul 31, 2003 at 02:24 UTC
|
They should all pass as they each evaluate to a list with one element.
Update: And they do. :-) No, not a bug. Remove the parentheses around $test and they will all fail.
-sauoq
"My two cents aren't worth a dime.";
| [reply] |
|
| [reply] |
|
Found = in conditional, should be == at -e line 1.
but the third example ("= undef") does not produce any warning. (I'm running 5.8.0, in case that makes a difference.)
| [reply] [d/l] |
|
... if($val == 3);
#versus
... if($val = 3);
In the first is checks to see if $val is 3 and in the second it sets $val to be 3 and then checks $val for truth which in this case is always true. So for normal situations that line should just be:
...; $val=3;
Which would have the same effect in my little sample program. | [reply] [d/l] [select] |
|
| [reply] |
|
| [reply] |
|
-sauoq
"My two cents aren't worth a dime.";
| [reply] |
Re: Can you guess the result? Is it a bug?
by edoc (Chaplain) on Jul 31, 2003 at 03:28 UTC
|
hmmm.. what am I doing wrong here? (perl, v5.8.0 built for i686-linux)
]$ perl -wMstrict -e"if( my($test) = 0 ) { print 'Passed'; } else { pr
+int 'Failed'; }"
Can't declare stub in "my" at -e line 1, near ") ="
Execution of -e aborted due to compilation errors.
]$ perl -wMstrict -e"if( my($test) = '' ) { print 'Passed'; } else { p
+rint 'Failed'; }"
Can't declare stub in "my" at -e line 1, near ") ="
Execution of -e aborted due to compilation errors.
]$ perl -wMstrict -e"if( my($test) = undef ) { print 'Passed'; } else
+{ print 'Failed'; }"
Can't declare stub in "my" at -e line 1, near ") ="
Execution of -e aborted due to compilation errors.
]$ perl -wMstrict -e "if( my $test = undef ) { print 'Passed'; } else
+{ print 'Failed'; }"
syntax error at -e line 1, near "my ="
Execution of -e aborted due to compilation errors.
I had to swap "/' to get it to run..
]$ perl -wMstrict -e 'if( my ($test) = undef ) { print "Passed"; } els
+e { print "Failed"; }'
Passed
]$ perl -wMstrict -e 'if( my $test = undef ) { print "Passed"; } else
+{ print "Failed"; }'
Failed
cheers,
J | [reply] [d/l] [select] |
|
Because $test is in double-quotes, your shell is trying to interpolate it. Since it isn't set though (and there aren't such things as warnings and strict for the shell ; ), it is replaced with nothing and becomes:
perl -wMstrict -e"if( my() = 0 ) { print 'Passed'; } else { print 'Fai
+led'; }"
If you escape the $ you'll be fine.
perl -wMstrict -e"if( my(\$test) = 0 ) { print 'Passed'; } else { prin
+t 'Failed'; }"
| [reply] [d/l] [select] |
|
A better way is to make sure the shell doesnt even try...
perl -wMstrict -e'if( my() = 0 ) { print "Passed"; } else { print "Failed"; }'
T
I
M
T
O
W
T
D
I
| [reply] [d/l] |
|
| [reply] |