我试图在Perl脚本的顶部分配一个常量,如下所示:
use constant {
# ...
CONSTNAME => qx{readlink -e __FILE__} || __FILE__,
# ...
};__FILE__不会在qx操作符中内插,这将导致失败。如何实现我想要的,即在调用shell的__FILE__之前插入readlink。
请注意:在中间变量中存储命令不是一个选项。
发布于 2011-05-03 18:39:42
要直接回答这个问题,您可以使用参考文献中描述的内插任意表达式字符串成语。
print qx{echo @{[ __FILE__ ]}};在评论中提出了几个注意事项:
[]供应列表上下文。这在这里并不重要,但总的来说是值得注意的。__FILE__有shell元字符,您可能会遇到麻烦。如果您的目标是找到已解析所有符号链接的perl脚本的路径,则可能需要查看模块。FindBin作为核心perl发行版的一部分已经有一段时间了(至少从5.004开始,根据http://search.cpan.org/~chips/perl5.004/的说法)。
发布于 2011-05-03 22:09:14
全Perl解决方案:
my $self = $0;
while( -l $self ){
$self = readlink $self;
}
use constant {
# ...
CONSTNAME => $self,
# ...
};发布于 2011-05-04 14:49:12
使用readpipe --相当于qx//的函数。Perl qx//的内部行为大多类似于qq//,然后将结果传递给readpipe。当qx//的引用行为受到阻碍时,您可以绕过它直接调用readpipe。
use constant {
CONSTNAME => readpipe('readlink -e ' . quotemeta(__FILE__)) || __FILE__,
};quotemeta将有助于防止文件名中可能出现的shell元字符攻击。
https://stackoverflow.com/questions/5874037
复制相似问题