在工作中,我们在与对象的析构函数中的子进程交互时遇到错误,并最终将其追踪到$?在等待调用期间被覆盖的变量.这是在调用exit()之后发生的,所以$?另外还意味着我们程序的返回代码到操作系统.
具体来说,perldoc谈到了这种错误:
Inside an END subroutine $? contains the value that is going to be given to exit(). You can modify $? in an END subroutine to change the exit status of your program.
我们不希望这种情况发生,所以我们把一个本地$?= $?;在每个END块内.但是现在程序将成功归功于操作系统,而实际上却失败了.
我设法将其分解为两个示例程序.一个按预期工作,一个失败.对于x86_64-linux-thread-multi,这在v5.8.8和v5.10.1上都会发生
程序A :(返回0到操作系统)
END{ local $?=$?; } exit(100);
程序B :(返回100到操作系统)
END{ local $?=$?>>8; } exit(100);
为什么分配给本地$的价值是多少?在最后一块?