B::Deparse can help:
$ perl -wMstrict -MO=Deparse sub find_symbol { got to here today } __END__ BEGIN { $^W = 1; } use strict; sub find_symbol { 'to'->got('today'->here); } - syntax OK $ perl -wMstrict -MO=Deparse sub find_symbol { I got to here today } __END__ Bareword "today" not allowed while "strict subs" in use at - line 2. - had compilation errors. BEGIN { $^W = 1; } use strict; sub find_symbol { 'got'->I('here'->to('today')); }
So the first one is just the Indirect Object Syntax, twice, while the second one assumes an extra parameter, and when that's a number it's fine; when it's a bareword it's not (under strict, at least). It just depends on whether the number of barewords is even or odd :-)
$ perl -wMstrict -MO=Deparse -e 'sub x { foo bar }' BEGIN { $^W = 1; } use strict; sub x { 'bar'->foo; } -e syntax OK $ perl -wMstrict -MO=Deparse -e 'sub x { foo bar quz }' Bareword "quz" not allowed while "strict subs" in use at -e line 1. -e had compilation errors. BEGIN { $^W = 1; } use strict; sub x { 'bar'->foo('quz'); } $ perl -wMstrict -MO=Deparse -e 'sub x { foo bar quz baz }' BEGIN { $^W = 1; } use strict; sub x { 'bar'->foo('baz'->quz); } -e syntax OK $ perl -wMstrict -MO=Deparse -e 'sub x { foo bar quz baz bleep }' Bareword "bleep" not allowed while "strict subs" in use at -e line 1. -e had compilation errors. BEGIN { $^W = 1; } use strict; sub x { 'bar'->foo('baz'->quz('bleep')); }
None of the code actually runs, of course :-)
BTW, maybe you want to use the "Yada Yada operator" (...) for unfinished code? (Perl v5.12 and up)
In reply to Re: I would have expected a syntax error here
by haukex
in thread Solved! I would have expected a syntax error here
by roboticus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |