Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Ampersands and sub speed

by friedo (Prior)
on Oct 14, 2005 at 21:15 UTC ( [id://500371]=note: print w/replies, xml ) Need Help??


in reply to Ampersands and sub speed

I think the reason is because calling a function with & preserves the existing @_, so perl doesn't have to mess with the argument stack. In other words, &function; is a kind-of fancy goto.

Replies are listed 'Best First'.
Re^2: Ampersands and sub speed
by diotalevi (Canon) on Oct 14, 2005 at 21:43 UTC

    No... goto() doesn't return to the next statement. This is a fancy way of saying function( @_ ).

      Closer, but they're still not the same. This code works,

      sub f { &g; print @_; } sub g { $_[0] .= "o, w"; push @_, "orld\n"; } +f($x = "hell");
      but if you change it like this, it breaks:
      sub f { g(@_); print @_; } sub g { $_[0] .= "o, w"; push @_, "orld\n"; + } f($x = "hell");

        Oh ok. That's even more evil than I would have normally thought. So &do_nothing; is like @_=do_nothing(@_) except that it doesn't make copies like would happen in that snippet.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://500371]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (7)
As of 2024-03-28 15:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found