内置变量$的含义是什么?在Perl

时间:2012-07-12 12:18:18

标签: perl system

  

可能重复:
  perl “dollar sign and question mark” question

我正在尝试理解某人编写的Perl脚本。我不太了解脚本中$?的用法。谁能解释一下下线的目的?

 system( "perform_task.sh", "-param1");
    if( ( $? >> 8 ) != 0 ) {
       print( "perform_task.sh failed " );
    } 

3 个答案:

答案 0 :(得分:8)

要查找任何变量的含义,您可以键入

$ perldoc -v '$?'

在命令行上安装了相对较新版本的Perl或扫描perldoc perlvar。通常,最好阅读您所拥有的perl特定版本的文档,但在紧要关头,考虑到由于版本差异而导致的任何可能的问题,在线版本也会这样做:{{3} }:

  

上次管道关闭,反引号(``)命令,成功调用wait()waitpid()system()运算符返回的状态。这只是传统的Unix wait()系统调用返回的16位状态字(或者看起来像是这样)。因此,子进程的退出值实际上是($? >> 8)$? & 127给出了进程死亡的信号(如果有的话),$? & 128报告是否存在核心转储。

可以从perldoc -v '$?'的文档中收集更多信息:

  

如果您想手动检查“系统”的故障,可以通过检查$?这样检查所有可能的故障模式:

   if ($? == -1) {
       print "failed to execute: $!\n";
   }
   elsif ($? & 127) {
       printf "child died with signal %d, %s coredump\n",
           ($? & 127),  ($? & 128) ? 'with' : 'without';
   }
   else {
       printf "child exited with value %d\n", $? >> 8;
   }

虽然在Stackoverflow上询问甚至基本问题没有任何问题,但如果你真的想成为一名有能力的程序员,你需要养成自己阅读文档的习惯,并培养自己理解文档的能力。

否则,您将浪费宝贵的时间来解决问题,而不是等待其他人为您阅读文档。

如果您选择不花费任何努力来理解文档,它确实不会影响我们其他人,但从长远来看它会伤害到您。

答案 1 :(得分:1)

use English;的{​​{1}}名称为$?。孩子的退出状态包括导致退出的可能的信号号码。请参阅$CHILD_ERROR

答案 2 :(得分:-1)

$?是子进程的错误代码(perform_task.sh)。

在脚本的情况下,返回代码向右移动8位,结果与0进行比较。 这意味着只有当返回的代码是>时才认为运行失败。比255。