34、Perl高级技术与错误处理

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 这样的信号会立即传递,所以这些情况仍然不安全。

练习题

以下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值