gpt4 book ai didi

perl - Perl 脚本开头的长 eval 字符串

转载 作者:行者123 更新时间:2023-12-04 14:31:42 24 4
gpt4 key购买 nike

我对 Perl 比较陌生,正在处理其他人编写的 Perl 文件,并且在脚本的开头不断遇到以下语句:

eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' && eval 'exec perl -w -S $0 $argv:q'
if 0;

这两行有什么作用?什么是代码检查? if 0; 有什么作用?句吗?

最佳答案

这是 exec hack 的一个变种。在可以使用 #! 可靠地指定解释器之前的日子里, 这被用来使 shell exec perl。 if 0 shell 永远不会读取第二行,它只读取第一行并执行 perl,读取 if 0并且不会重新执行自身。

这是一个有趣的变体,但我认为不太正确。它似乎被设置为与 bourne shell 或 csh 变体一起使用,使用初始 eval 来确定解析它的 shell,然后使用适当的语法将参数传递给 perl。中间的子句是 sh 语法,最后一个子句适用于 csh。如果第二个 &&分别是 ||和初始 eval '(exit $?0)'实际上确实在 csh 中失败了,那么这将实现这些目标,但正如所写的那样,我认为它对 csh 不太适用。在此之前是否有一个命令可以设置 $?到基于 shell 的某个值?但即使是这样,$?设置为非零值,那么除非 &&,否则不会执行任何操作替换为 || .有趣的事情正在发生。

关于perl - Perl 脚本开头的长 eval 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com