如何在qx中使用__FILE__?

0xC*_*22L 3 perl qx

我试图在Perl脚本的顶部分配一个常量,如下所示:

use constant {
  # ...
  CONSTNAME => qx{readlink -e __FILE__} || __FILE__,
  # ...
};
Run Code Online (Sandbox Code Playgroud)

__FILE__不会在qx运算符内插入,这会导致失败.我怎样才能实现我想要的,即__FILE__ 调用readlinkshell 之前插入.

请注意:不能将命令存储在中间变量中.

And*_*ndy 8

要直接回答这个问题,你可以使用perlref中描述的interpolate-arbitrary-expression-in-string习惯用法:

print qx{echo @{[ __FILE__ ]}};
Run Code Online (Sandbox Code Playgroud)

评论中提出了几个警告:

  • []设备列表环境.这在这里无关紧要,但总的来说值得注意.
  • 如果__FILE__有shell元字符,你可能会遇到麻烦.

如果您的目标是找到解析了所有符号链接的perl脚本的路径,您可能需要查看该FindBin模块.FindBin已经成为核心perl发行版的一部分已有一段时间了(至少从5.004开始,根据http://search.cpan.org/~chips/perl5.004/).

  • *但要小心:方括号为其表达式提供列表上下文.在这种情况下它没关系,但是当它发生时,使用一个显式的`标量`来强制上下文:`说'mysub现在返回@ {[标量mysub(1,2,3)]}."`* - 来自**Programming Perl,第3版**,第259页的轻微释义. (7认同)