从$中提取信息?

Raj*_*mar 10 perl

您能否提供有关以下perl代码段的详细说明.我从谷歌得到了一些想法,但仍有很多基本的混乱.如果你可以提供小笔记,那将是很有帮助的

$exit_value  = $? >> 8;
$signal_num  = $? & 127;
$dumped_core = $? & 128;
Run Code Online (Sandbox Code Playgroud)

rai*_*7ow 12

引用文件:

$?

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

>> 8 给我们一个16位字的高字节.

& 127基本上是相同的& 0b01111111,给出该单词的低7位部分.

& 128是相同的& 0b10000000,它基本上检查结果的第8位.


zou*_*oul 6

perldoc -f system:

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;
}
Run Code Online (Sandbox Code Playgroud)

$?语义取自wait系统调用,见man 2 wait.