我有一个基于 Term::ReadLine 和 LWP::UserAgent 的脚本
逻辑是这样的,
while (defined ($_ = $term->readline('console> ')))
{
next unless $_; chomp;
if ($_ eq 'exit')
{
last;
}
&run ($_);
}
sub run {
my $ua = LWP::UserAgent->new;
my $resp = $ua->get (...);
say $resp->content;
}
在run
中它将执行一个LWP请求。现在,如果我按 CTRL + C,不仅 LWP 会终止,整个 Perl 脚本也会终止。
我只想终止 LWP 请求。有任何想法吗?
我可以添加一个 SIGINT 处理程序,但我不知道该处理程序应该做什么
最佳答案
将信号转换为异常。
local $SIG{INT} = sub { die "SIGINT\n" };
通常,人们会将代码包装在 eval BLOCK
中,但 LWP::UserAgent 会捕获这些异常并返回错误响应。
例如,
use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $response = do {
local $SIG{INT} = sub { die "SIGINT\n" };
$ua->get("http://localhost/zzz.crx")
};
say $response->is_success ? "Successful" : "Unsuccessful";
say $response->code;
say $response->status_line;
如果没有收到 SIGINT,则输出:
Successful
200
200 OK
收到 SIGINT 时输出:
Unsuccessful
500
500 SIGINT
关于perl - 使用 CTRL + C 终止当前的 LWP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41627980/