Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
Perl: the Markov chain saw
 
PerlMonks  

Re: subroutine refs

by broquaint (Abbot)
on Nov 30, 2007 at 18:19 UTC ( #654158=note: print w/ replies, xml ) Need Help??


in reply to subroutine refs

You can safely create a reference to a subroutine by name and the execute that e.g

use strict; sub dynamic { print "Mmm, dynamic.\n"; } my $name = 'dynamic'; my $subref = \&$name; &$subref();
HTH

_________
broquaint


Comment on Re: subroutine refs
Download Code
Re^2: subroutine refs
by blokhead (Monsignor) on Nov 30, 2007 at 18:50 UTC
    I find this very surprising. But I checked it and it apparently works.

    Why does this give an error:

    use strict; sub dynamic { print "hello\n"; } my $name = "dynamic"; &$name();
    .. and yet this is ok? (they differ only in the last line)
    use strict; sub dynamic { print "hello\n"; } my $name = "dynamic"; &{ \&$name }();
    Before seeing this, I would have bet anything that the &{\&{ ... }} operation was absolutely the same as &{...} (barring weird action-at-a-distance caused by tying, overloading, etc). In fact, I'm not sure whether to consider this a bug or not. Indeed, what is \&$name doing other than "using string as a subroutine ref", which is outlawed under strict refs?

    Yet a similar idea with other kinds of refs doesn't do this. Both of these examples fail under strict refs (in my mind because @{\@{...}} is unconditionally the same thing as @{...} ):

    use strict; our @dynamic = ("hello\n"); my $name = "dynamic"; print @$name;
    use strict; our @dynamic = ("hello\n"); my $name = "dynamic"; print @{ \@$name };
    My conclusion is that there is an important distinction between naming a subroutine and invoking it, which is manifested bizarrely by different behaviors in the \&{blah} and &{blah} mechanisms.

    blokhead

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (16)
As of 2013-06-19 17:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How many continents have you visited?









    Results (660 votes), past polls