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