williams has asked for the wisdom of the Perl Monks concerning the following question:
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Surprising Precedence/Context
by Paladin (Vicar) on Jun 02, 2017 at 18:03 UTC | |
by Anonymous Monk on Jun 02, 2017 at 18:46 UTC | |
by williams (Beadle) on Jun 02, 2017 at 19:04 UTC | |
|
Re: Surprising Precedence/Context
by LanX (Saint) on Jun 02, 2017 at 19:15 UTC | |
by williams (Beadle) on Jun 02, 2017 at 19:51 UTC | |
by LanX (Saint) on Jun 02, 2017 at 20:11 UTC | |
| A reply falls below the community's threshold of quality. You may see it by logging in. |