我如何'需要'由子例程返回的路径寻址的Perl库?

Fre*_*abe 5 perl

我可以用它来包含一个文件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)

......但那并不是非常漂亮.

amo*_*mon 8

require(fn());
Run Code Online (Sandbox Code Playgroud)

多么奇怪的语法错误!添加额外的括号以消除歧义优先级可以解决问题.似乎否则require PACKAGE表单将优先于表单,即将require EXPRfn解析为指定要加载的模块的bareword.

  • 哦,我没想到!是的,任何在`require`之后直接阻止裸字令牌的东西(除了一元`+`,由于某种原因?).但是我们宁愿坚持使用Modern Perl,也不再谈论`&foo()`样式调用:D (3认同)
  • 或者你可以添加&:) (2认同)