在Perl中覆盖die并仍在Windows上返回正确的退出代码

rod*_*dee 4 perl

在Windows上,我想只在脚本死亡时执行某些操作.下面的块没有帮助; 我认为这是因为Windows不支持信号.

$SIG{__DIE__} = sub {
    qx(taskkill /F /IM telnet.exe);
    CORE::die @_;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试了这个:

END {
    qx(taskkill /F /IM telnet.exe);
    exit $exit_code;
}
Run Code Online (Sandbox Code Playgroud)

它执行了taskkill,但退出了退出代码0.我需要传播,exit_code因为我们基于它进行进一步处理.

ike*_*ami 8

END块可以设置$?为控制退出值.

END {
      qx(taskkill /F /IM telnet.exe);
      $? = $exit_code;
}
Run Code Online (Sandbox Code Playgroud)