Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

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


Comment on Re: Calling a subroutine from a scalar
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (8)
As of 2015-07-01 23:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (25 votes), past polls