Dar*_*nke 2 perl signals module
在我的模块的BEGIN部分中有以下内容:
use sigtrap qw(handler shutdown normal-signals);
use sigtrap qw(die untrapped normal-signals stack-trace any error-signals);
Run Code Online (Sandbox Code Playgroud)
但是当sigtrap捕获INT等时,我在关闭子中获得的内容只包含陷阱而不是对象句柄.没有$ self.
sub shutdown {
my $sig = shift || 'Nothing';
print "Got signal: $sig\n";
exit;
}
Run Code Online (Sandbox Code Playgroud)
简单地回来
Got signal: INT
Run Code Online (Sandbox Code Playgroud)
我的DESTROY在此之后正确调用并且可以访问对象句柄,但由于我在关机时无法访问句柄,因此我无法存储它并且不知道信号是什么.
我需要知道我得到了什么陷阱,所以我的DESTROY方法可以记录导致关闭的原因.
也许sigtrap不是这里的最佳选择.意见欢迎.
我检查过sigtrap
,它不是特定的OO模块,如果你想将它作为一个模块使用,你可能需要使用闭包而不是对象方法.
所以你可以这样定义你的类:
package SigHandler;
sub new {
my $class = shift;
return bless { @_ }, $class;
}
sub on_signal_int {
my $self = shift;
...
}
sub get_handler {
my $self = shift;
my @other_args = shift;
...
return sub {
my $sig = shift;
if ( $sig == INT ) {
return $self->on_signal_int();
}
};
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
use handler => SigHandler->new->get_handler, 'normal-signals';
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2501 次 |
最近记录: |