http://qs321.pair.com?node_id=209262


in reply to Little Perl Mysteries: what's your answer?

And my 2 cents worth..
A function prototyped to accept no arguments is treated as a candidate for inlining by the Perl compiler. In this case sub foo(){2} will be inlined because it returns a constant. The snippet will thus print 2, because print foo(); is turned into print 2; by the compiler, no matter what you do to the definition of sub foo later on at runtime.
Nice one, Ovid!

CU
Robartes-

Replies are listed 'Best First'.
Re: Re: Little Perl Mysteries: what's your answer?
by dada (Chaplain) on Oct 31, 2002 at 08:54 UTC
    and the proof is:
    c:\>perl -MO=Deparse -e "sub foo(){2};*::foo=sub(){3};print foo();" sub foo () { 2; } *foo = sub () { 3; } ; print 2; -e syntax OK

    cheers,
    Aldo

    King of Laziness, Wizard of Impatience, Lord of Hubris