Возвращает ссылку на подпрограмму.
Вот простой пример, который создает подчиненные ссылки, закрытые по значению:
my $add_5_to = add_x_to(5);
print $add_5_to->(7), "\n";
sub add_x_to {
my $x = shift;
return sub { my $value = shift; return $x + $value; };
}
Вы также можете работать с именованными подпрограммами следующим образом:
sub op {
my $name = shift;
return $op eq 'add' ? \&add : sub {};
}
sub add {
my $l = shift;
my $r = shift;
return $l + $r;
}
Вы можете использовать eval
с произвольной строкой, но не делайте этого. Код трудно читать, и он перезапускает компиляцию, что замедляет все. Есть небольшое количество случаев, когда строка Eval является лучшим инструментом для работы. Каждый раз, когда строка eval кажется хорошей идеей, вам, скорее всего, лучше использовать другой подход.
Практически все, что вы хотели бы сделать со строкой eval, можно достичь с помощью замыканий.