在Perl中调用函数的方法?

时间:2017-04-04 17:23:36

标签: perl perlscript

我可以通过动态获取子程序来调用子程序,如下所示:

printf "Enter subroutine name:"; 
 $var1=<STDIN>;      #input is E111;
 $var1(); 

E111:

sub E111(){
    printf "Hi this is E111 & Bye \n";
}

有没有可能这样做,我是perl编程的新手。

2 个答案:

答案 0 :(得分:7)

在Perl中你可以做的事情很少有硬性限制,但这是你不想去的地方之一。一个常见的方法是使用调度表

my %call = (
    'name_1' => sub { function body },   # inline, anonymous subroutine
    'name_2' => \&func,                  # or take a reference to a sub
    ...
);

其中sub {}匿名子例程,因此name_1的值是代码参考

然后你用它作为

my $name = <STDIN>;
chomp $name;

$call{$name}->(@arguments);  # runs the code associated with $name

这会在散列中找到键$name并取消引用它的值coderef;所以它运行该代码。

文档:概述perlintro,教程perlreftut以及参考perlrefperlsub

答案 1 :(得分:0)

解决方案:

print "Enter subroutine name:";

$var1 = <STDIN>;
chomp($var1);

eval "$var1()";

sub E111 {
    print "Hi this is E111 & Bye \n";
}