首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在qx中使用__FILE__?

如何在qx中使用__FILE__?
EN

Stack Overflow用户
提问于 2011-05-03 18:34:16
回答 3查看 780关注 0票数 3

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

代码语言:javascript
复制
use constant {
  # ...
  CONSTNAME => qx{readlink -e __FILE__} || __FILE__,
  # ...
};

__FILE__不会在qx操作符中内插,这将导致失败。如何实现我想要的,即在调用shell的__FILE__之前插入readlink

请注意:在中间变量中存储命令不是一个选项。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-03 18:39:42

要直接回答这个问题,您可以使用参考文献中描述的内插任意表达式字符串成语。

代码语言:javascript
复制
print qx{echo @{[ __FILE__ ]}};

在评论中提出了几个注意事项:

  • []供应列表上下文。这在这里并不重要,但总的来说是值得注意的。
  • 如果__FILE__有shell元字符,您可能会遇到麻烦。

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

票数 8
EN

Stack Overflow用户

发布于 2011-05-03 22:09:14

全Perl解决方案:

代码语言:javascript
复制
my $self = $0;
while( -l $self ){
  $self = readlink $self;
}
use constant {
  # ...
  CONSTNAME => $self,
  # ...
};
票数 2
EN

Stack Overflow用户

发布于 2011-05-04 14:49:12

使用readpipe --相当于qx//的函数。Perl qx//的内部行为大多类似于qq//,然后将结果传递给readpipe。当qx//的引用行为受到阻碍时,您可以绕过它直接调用readpipe

代码语言:javascript
复制
use constant {
    CONSTNAME => readpipe('readlink -e ' . quotemeta(__FILE__)) || __FILE__,
};

quotemeta将有助于防止文件名中可能出现的shell元字符攻击。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5874037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档