I don't understand why the following dies on the last line.
#!/usr/bin/perl use strict; use warnings; my($bad)='/this/path/does/not/exist'; die "$bad exists, but must not\n" if -f $bad; my($yes1)=(defined $bad and -f $bad); #2nd parens seem unnecessary, die "yes1=$yes1\n" if $yes1; #but does not die here; good my($yes2)=defined $bad and -f $bad; #2nd parens removed, die "yes2=$yes2\n" if $yes2; #but dies here; why?
The parentheses on the left-hand side of the my statement for both $yes1 and $yes2 should impose list context on the right-hand side. So I'd expect the parentheses added for $yes1 to have no effect. Also, I didn't think the two operators used here, defined and -f, changed behavior between scalar and list context. Also, I'd expect the low-precedence and to keep the defined and the -f separated from each other.
This is on Linux with Perl 5.10.1, which I can't control. Thanks.
Jim
In reply to Surprising Precedence/Context by williams
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |