加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

die()不会退出Perl脚本的情况?

发布时间:2020-12-15 23:37:10 所属栏目:大数据 来源:网络整理
导读:我正在使用长时间运行的Perl脚本调试一个非常奇怪的问题. 问题是脚本没有按预期退出die().相反,脚本只是挂起而不返回. 我自己没有定义任何错误处理程序,所以我认为die()会导致脚本立即终止. 这是脚本的基本结构和使用的模块: #!/usr/bin/perluse strict;use
我正在使用长时间运行的Perl脚本调试一个非常奇怪的问题.

问题是脚本没有按预期退出die().相反,脚本只是挂起而不返回.

我自己没有定义任何错误处理程序,所以我认为die()会导致脚本立即终止.

这是脚本的基本结构和使用的模块:

#!/usr/bin/perl

use strict;
use utf8;
use warnings;

use DBI; # with MySQL driver ("dbi:mysql:database=...")
use Geo::IP;
use POSIX;
use URI::Escape;

open(COMMAND,'command_line |');
while (<COMMAND>) {
    #
    # .. stuff that can go wrong ..
    #
    die("I'm expecting the script to terminate here. It doesn't.") if ($gone_wrong);
}
close(COMMAND);

这种行为有什么解释?是否已知使用的任何模块设置错误处理程序,可以解释挂在die()上的脚本?

解决方法

好吧,在模具之后仍然会调用END块和对象析构函数.如果其中一个挂起(或做了需要很长时间的事情),脚本将不会立即退出.但是这应该在从die中打印消息之后发生(除非STDERR被缓冲,因此你不会立即看到消息).

你提到DBI,所以你可能有一个数据库句柄,它的析构函数被调用. (不过我不确定那是不是问题.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读