我可以通过动态获取子程序来调用子程序,如下所示:
printf "Enter subroutine name:";
$var1=<STDIN>; #input is E111;
$var1();
Run Code Online (Sandbox Code Playgroud)
E111:
sub E111(){
printf "Hi this is E111 & Bye \n";
}
Run Code Online (Sandbox Code Playgroud)
有没有可能这样做,我是perl编程的新手.
您在Perl中可以做的事情很少有硬性限制,但这是您不想去的地方之一.一个常见的方法是使用调度表
my %call = (
'name_1' => sub { function body }, # inline, anonymous subroutine
'name_2' => \&func, # or take a reference to a sub
...
);
Run Code Online (Sandbox Code Playgroud)
其中sub {}是匿名的子程序,所以对于值name_1是一个代码的参考.
然后你用它作为
my $name = <STDIN>;
chomp $name;
$call{$name}->(@arguments); # runs the code associated with $name
Run Code Online (Sandbox Code Playgroud)
这会找到$name哈希中的键并取消引用它的值,即coderef; 所以它运行该代码.
文档:概述perlintro,教程perlreftut和参考perlref和perlsub.