加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 22:04:41 所属栏目:大数据 来源:网络整理
导读:我是Perl的新手,正在处理其他人编写的Perl文件,我在脚本的开头遇到了以下语句: eval '(exit $?0)' eval 'exec perl -w -S $0 ${1+"$@"}' eval 'exec perl -w -S $0 $argv:q' if 0; 这两条线做了什么?什么是代码检查?什么是if 0;一句呢? 解决方法 这是exe
我是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的某些价值?但即使是这样的情况和$?设置为非零值,除非&&和&替换为||.有趣的事情正在发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读