Способы вызова функции в Perl?
Могу ли я вызвать подпрограмму, взяв ее имя динамически, как показано ниже:
printf "Enter subroutine name:";
$var1=<STDIN>; #input is E111;
$var1();
E111:
sub E111(){
printf "Hi this is E111 & Bye \n";
}
Есть ли возможность сделать это, я новичок в программировании на Perl.
2 ответа
Существует очень мало жестких ограничений на то, что вы можете делать в 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";
}