我正在用一个长时间运行的 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
之后仍然调用 block 和对象析构函数.如果其中一个挂起(或执行需要很长时间的操作),则脚本不会立即退出。但这应该在打印来自 die
的消息后发生。 (除非 STDERR 被缓冲,因此您不会立即看到该消息)。
您提到了 DBI,因此您可能有一个正在调用其析构函数的数据库句柄。 (不过,我不确定这是否是问题所在。)
关于perl - 在哪些情况下 die() 不会退出 Perl 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6686384/