Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: Calling a subroutine from a scalar

by tlm (Prior)
on Jun 29, 2005 at 15:47 UTC ( #471075=note: print w/replies, xml ) Need Help??

in reply to Calling a subroutine from a scalar

Your question suggests a logical confusion. One can't store a subroutine in a scalar variable. You can store a reference to a subroutine in a scalar variable, or you can, as in your code, store the name of a subroutine in a scalar variable.

In the former case, the answer to your question is easy:

my $coderef = \&some_sub; # $coderef contains a reference to &some_su +b my $results = $coderef->();

In the latter case, you can either use eval:

my $subname = 'some_sub'; my $results = eval "$subname()"; die $@ if $@;
or you can treat it as a symbolic ref:
my $results = do { no strict 'refs'; $subname->() };

use strict; use warnings; sub some_sub { print "Hello world!\n"; return 42; } my $coderef = \&some_sub; my $subname = 'some_sub'; print $coderef->(), "\n"; print eval "$subname()", "\n"; die $@ if $@; print do { no strict 'refs'; $subname->() }, "\n"; __END__ Hello world! 42 Hello world! 42 Hello world! 42

But storing names of subroutines in variables should be a red flag to alert you that you are probably not thinking about the problem in the right way.

the lowliest monk

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://471075]
[Corion]: Cool. Google makes it easier for me to wean myself off Google Keep. The app now insists on saving items online before displaying them in the offline view.
[Corion]: I should maybe set up a "public" instance of my clone just to manage feature suggestions ;)

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (7)
As of 2017-04-25 11:48 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (450 votes). Check out past polls.