Nul*_*man 7 perl interrupt perl5
我正在尝试做这样的事情
$SIG{ALRM} = sub {
print $line_number_when_alarm_went_off;
};
alarm 10;
# rest of the script
Run Code Online (Sandbox Code Playgroud)
我正在使用ALRM一个例子,我将最终使用不同的信号从外部杀死以触发它.这种操作有一种巧妙的方法吗?
我有一些慢脚本,有时我想给他们一个信号,知道那时代码在哪里.
我希望尽可能不引人注目,这样我就可以打包并将其添加到遗留代码中.
您可以caller在列表上下文中使用以获取当前子调用的位置的包,文件和行号.
$SIG{ALRM} = sub {
my ($pkg, $file, $line) = caller;
CORE::say $line;
die;
};
alarm 2;
while (1) {
1;
}
Run Code Online (Sandbox Code Playgroud)
这将输出11(如果我计算正确,在我的文件中它是1740,并且该$SIG行是1730.
它也适用于其他信号处理程序,如warn.
$SIG{__WARN__} = sub {
my ($pkg, $file, $line) = caller;
CORE::say $line;
};
warn 'foo';
Run Code Online (Sandbox Code Playgroud)
这将输出 7
请注意,您的代码有语法错误.您将散列引用指定为信号处理程序,而不是子引用!
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |