in reply to Re^2: Tiny Perl puzzle
in thread Tiny Perl puzzle

I think B::Deparse gets it wrong -- as it sometimes does -- when you add -p:

My theory: When Deparse tries to add parens wherever it can, it treats the first two as a function call (which was my first guess too). But as tobyink correctly surmised, that first two is treated by print as a filehandle.

This is confirmed by the more low-level output of B::Concise:


Dave

Replies are listed 'Best First'.
Re^4: Tiny Perl puzzle
by Anonymous Monk on Jun 07, 2014 at 07:25 UTC
Re^4: Tiny Perl puzzle
by LanX (Saint) on Jun 07, 2014 at 15:38 UTC
    I don't think so.

    did you recompile the output?

    I can't test ATM, but most likely it depends if a function is known at compile time. Contrary to AnoMonk I doubt space matters.

    Anyway IMHO the indirect object syntax should be deprecated....

    Cheers Rolf

    (addicted to the Perl Programming Language)

      I can't test ATM

      You gotta stop saying that :)

      Contrary to AnoMonk I doubt space matters.

      Sure it does, it matters how Deparse places the space, because it matters to perl

      $ perl -w print(two (('two' == 'five') ? 'true' : 'false')); Unquoted string "two" may clash with future reserved word at - line 1. ^Z Name "main::two" used only once: possible typo at - line 1. Argument "five" isn't numeric in numeric eq (==) at - line 1. Argument "two" isn't numeric in numeric eq (==) at - line 1. print() on unopened filehandle two at - line 1.
      That is exactly as deparsed with -p, behaves exactly like the original