Способы вызова функции в 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";
}
Другие вопросы по тегам