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";;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: BUG when parsing defined-or ?
by LanX (Saint) on Jan 24, 2016 at 22:41 UTC |