我是Perl的新手,正在处理其他人编写的Perl文件,我在脚本的开头遇到了以下语句:
eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' && eval 'exec perl -w -S $0 $argv:q'
if 0;
Run Code Online (Sandbox Code Playgroud)
这两条线做了什么?什么是代码检查?这if 0;句话怎么办?
这是exec hack的变种.在使用a可靠地指定解释器的前几天#!,这用于制作shell exec perl.在if 0第二行是永远不会由外壳,其读取第一个行仅和高管PERL,其内容的阅读if 0,并且不重新执行本身.
这是一个有趣的变体,但我认为不太正确.它似乎设置为使用bourne shell或csh变体,使用初始eval确定解析它的shell,然后使用适当的语法将参数传递给perl.中间子句是sh语法,最后一个子句适用于csh.如果第二&&个||并且初始eval '(exit $?0)'确实在csh中失败了,那么这将实现这些目标,但正如所写,我认为它不适用于csh.是否有一个命令在此之前$?根据shell 设置为某个值?但即使是这种情况并且$?设置为非零值,除非&&被替换为,否则不会执行任何操作||.有趣的事情正在发生.
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |