Perl高级技术与错误处理
信号处理
在处理数据时,有时需要在接收到中断信号时中止整体处理,但不能在处理一行数据的中途中断。可以在信号处理程序中设置一个标志,并在每行处理结束时检查该标志。示例代码如下:
my $int_count = 0;
sub my_int_handler { $int_count++ }
$SIG{'INT'} = 'my_int_handler';
...;
while (<SOMEFILE>) {
...; # some processing that takes a few seconds ...
if ($int_count) {
# interrupt was seen!
print "[processing interrupted...]\n";
last;
}
}
在处理每行数据时,如果没有人按下 Control-C , $int_count 的值将为 0,循环会继续处理下一项。如果接收到信号,信号处理程序会增加 $int_count 标志,在检查时跳出循环。
Perl 通常只会在到达安全点时处理信号,例如在分配内存或重新排列内部数据结构时,不会传递大多数信号。不过,像 SIGILL 、 SIGBUS 和 SIGSEGV 这样的信号会立即传递,所以这些情况仍然不安全。
练习题
以下
超级会员免费看
订阅专栏 解锁全文
2050

被折叠的 条评论
为什么被折叠?



