OK I wasn't sure if comparing do EXPR with print LIST was fair, so I tried something more similar with eval EXPR

sorry but that's really ridiculous, the priority of parens is handled the other way round.

$ perl -MO=Concise -e 'eval ($foo)->{bar};' 8 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v:{ ->3 7 <2> helem vK/2 ->8 5 <1> rv2hv[t2] sKR/1 ->6 4 <1> entereval[t256] sK/1 ->5 - <1> ex-rv2sv sK/1 ->4 3 <#> gvsv[*foo] s ->4 6 <$> const[PV "bar"] s/BARE ->7 -e syntax OK $ perl -MO=Concise -e 'do ($foo)->{bar};' 9 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v:{ ->3 8 <1> dofile vK/1 ->9 7 <2> helem sK/2 ->8 5 <1> rv2hv[t2] sKR/1 ->6 4 <1> rv2sv sKPM/DREFHV,1 ->5 3 <#> gv[*foo] s ->4 6 <$> const[PV "bar"] s/BARE ->7 -e syntax OK

I can't really blame B::Deparse for failing to guess this parser weirdness.

It's using heuristics to produce readable code without too many parens to group obvious precedence.

How are the authors supposed to known that do is special?

update

in hindsight it would be safer if B::Deparse was grouping complex LHS of the arrow OP into parens.

even if this is correct

$ perl -MO=Deparse -e '(eval $foo)->{bar};' eval($foo)->{'bar'};

nobody would mind getting this instead.

(eval($foo))->{'bar'};

Cheers Rolf

(addicted to the Perl Programming Language and ☆☆☆☆ :)


In reply to Re^2: B::Deparse weirdness (parser weirdness!) by LanX
in thread B::Deparse weirdness by choroba

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.