Perl脚本开始时的长eval字符串

前端之家收集整理的这篇文章主要介绍了Perl脚本开始时的长eval字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是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读取,它只读取第一行并执行perc,它读取if 0并且不会重新执行自身.

这是一个有趣的变体,但我认为不太正确.它似乎设置为使用bourne shell或csh变体,使用初始eval确定解析它的shell,然后使用适当的语法将参数传递给perl.中间子句是sh语法,最后一个子句适用于csh.如果第二个&&是||并且最初的eval'(退出$?0)确实在csh中失败了,那么这将实现这些目标,但正如所写,我认为它不适用于csh.是否有一个命令在此之前设置$?基于shell的某些价值?但即使是这样的情况和$?设置为非零值,除非&&和&替换为||.有趣的事情正在发生.

猜你在找的Perl相关文章