IPC :: Run的状态变量的位移操作

时间:2014-11-19 16:23:15

标签: perl cpan

我最近遇到了以下代码之一的perl模块

  my @cat = qw( cat );
  use IPC::Run qw( run timeout );

   eval { run \@cmd, '<', "in.txt", \&out, \&err or die "cat: $?" };
  #here why status variable is being done Binary Shift Right
  my $status = $? >> 8;

我无法理解二进制转换的原因。

2 个答案:

答案 0 :(得分:1)

  

我无法理解二元转换的原因。

因为如果不这样做,就无法获得所需的信息。

$?包含三条信息:

  • 什么信号杀死了这个过程($? & 0x7F
  • 是否产生了核心转储(($? >> 7) & 1
  • 错误代码是否已传递给exit$? > 8

答案 1 :(得分:0)

允许返回代码的“嵌套”。

因此,您可以区分生成错误代码的cat和生成错误代码的run(或您正在进行的任何perl调用)之间的区别。