in reply to BUG when parsing defined-or ?

Insights?

Precedence.

The sub (&), form attempts to parse what follows the block into a list of values to pass to the subroutine, thus it is attempting to parse // "is undef" before it calls the sub and as there is no lvalue to a binary operator, it crunches.

You need parens -- either around the arguments for the sub, or around the entire subcall -- to ensure that the returned value from the sub becomes the lvalue to the operator.

sub block(&) { return undef; };; print block {'whatever'} // "is undef";; String found where operator expected at (eval 10) line 1, near "// "is + undef"" (Missing operator before "is undef"?) [Too many arguments for main::block at (eval 10) line 1, near "// "is +undef"" syntax error at (eval 10) line 1, near "// "is undef"" print +( block {'whatever'} ) // "is undef";; is undef print block( sub{'whatever'} ) // "is undef";; is undef "is undef";;

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: BUG when parsing defined-or ?
by LanX (Saint) on Jan 24, 2016 at 22:41 UTC
    > The sub (&), form attempts to parse what follows the block into a list of values to pass to the subroutine,

    this shouldn't be!

    The prototype is explicitly declaring that only one value (i.e. the block) is passed to the sub.

    > as there is no lvalue to a binary operator, it crunches.

    || is a binary operator too and according to perldoc it has the same precedence.

    and as demonstrated || works as expected.

    Simply phrased: please explain: why || and not //.

    Cheers Rolf
    (addicted to the Perl Programming Language and ☆☆☆☆ :)
    Je suis Charlie!