我可以通过动态获取子程序来调用子程序,如下所示:
printf "Enter subroutine name:";
$var1=<STDIN>; #input is E111;
$var1();
E111:
sub E111(){
printf "Hi this is E111 & Bye \n";
}
有没有可能这样做,我是perl编程的新手。
答案 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以及参考perlref和perlsub。
答案 1 :(得分:0)
解决方案:
print "Enter subroutine name:";
$var1 = <STDIN>;
chomp($var1);
eval "$var1()";
sub E111 {
print "Hi this is E111 & Bye \n";
}