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:
or you can treat it as a symbolic ref:my $subname = 'some_sub'; my $results = eval "$subname()"; die $@ if $@;
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
|
---|
In Section
Seekers of Perl Wisdom