我可以用它来包含一个文件a.pl:
require 'a.pl';
Run Code Online (Sandbox Code Playgroud)
或者我可以用这个:
$fn = 'a.pl';
require $fn;
Run Code Online (Sandbox Code Playgroud)
但是,子程序不起作用:
sub fn { return 'a.pl'; }
require fn(); # This is a syntax error
Run Code Online (Sandbox Code Playgroud)
是否有允许这样的语法?我注意到我可以解决这个问题
sub fn { return 'a.pl'; }
require eval("fn()");
Run Code Online (Sandbox Code Playgroud)
......但那并不是非常漂亮.
require(fn());
Run Code Online (Sandbox Code Playgroud)
多么奇怪的语法错误!添加额外的括号以消除歧义优先级可以解决问题.似乎否则require PACKAGE表单将优先于表单,即将require EXPR其fn解析为指定要加载的模块的bareword.