如何'需要'由子例程返回的路径寻址的Perl库?
问题描述:
我可以用它来包括文件a.pl
:如何'需要'由子例程返回的路径寻址的Perl库?
require 'a.pl';
或者,我可以用这个:
$fn = 'a.pl';
require $fn;
然而,一个子程序将无法正常工作:
sub fn { return 'a.pl'; }
require fn(); # This is a syntax error
有一个允许这个的语法?我注意到我可以通过
sub fn { return 'a.pl'; }
require eval("fn()");
解决问题...但这并不是非常漂亮。
答
require(fn());
多么奇怪的语法错误!添加一个额外的括号以消除优先级可以解决问题。看起来,否则require PACKAGE
表格将优先于require EXPR
,即fn
被解析为指定要加载的模块的裸字。
答
下可能出现的 “现代”,但不够正确/标准/ POLA:
require fn->();
或者,也许一个匿名的子程序是更可读/效率以某种方式:
my $fn = sub { return "a.pl"; } ;
require $fn->();
或你可以添加一个&:) – ysth
哦,我没有想到这一点!是的,任何阻止在'require'之后直接输入裸字符的东西(除了一元'+',出于某种原因?)。但是我们应该坚持使用Modern Perl,并且再也不会提及'&foo()'风格调用:D – amon
是的,~~也可以工作:) – ysth