perl – END块中的本地($?) – 为什么分配给它的值是多少?
发布时间:2020-12-16 06:18:53 所属栏目:大数据 来源:网络整理
导读:在工作中,我们在与对象的析构函数中的子进程交互时遇到错误,并最终将其追踪到$?在等待调用期间被覆盖的变量.这是在调用exit()之后发生的,所以$?另外还意味着我们程序的返回代码到操作系统. 具体来说,perldoc谈到了这种错误: Inside an END subroutine $?
在工作中,我们在与对象的析构函数中的子进程交互时遇到错误,并最终将其追踪到$?在等待调用期间被覆盖的变量.这是在调用exit()之后发生的,所以$?另外还意味着我们程序的返回代码到操作系统.
具体来说,perldoc谈到了这种错误:
我们不希望这种情况发生,所以我们把一个本地$?= $?;在每个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); 为什么分配给本地$的价值是多少?在最后一块? 解决方法
看起来像是perl中的一个bug.显然是自我分配$?在当地被打破:
% perl -wle '$? = 123; print "before: $?"; local $? = $?; print "after: $?"' before: 123 after: 0 但是这个版本运行正常: % perl -wle '$? = 123; print "before: $?"; local $? = $? + 0; print "after: $?"' before: 123 after: 123 很奇怪. 错误报告已经是filed. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |