我可以通过动态取名来调用子程序吗?
printf "Enter subroutine name: ";
$var1 = <STDIN>; # Input is E111;
$var1();
功能E111:
sub E111(){
printf "Hi, this is E111 & Bye \n";
}
有可能这样做吗?
我可以通过动态取名来调用子程序吗?
printf "Enter subroutine name: ";
$var1 = <STDIN>; # Input is E111;
$var1();
功能E111:
sub E111(){
printf "Hi, this is E111 & Bye \n";
}
有可能这样做吗?
您可以在 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参考资料。
一个解法:
print "Enter subroutine name:";
$var1 = <STDIN>;
chomp($var1);
eval "$var1()";
sub E111 {
print "Hi this is E111 & Bye \n";
}