hma*_*tt1 3 unix linux perl head
我的Perl脚本输出并记录了许多行文本,并进行了一些清理并压缩了END
块中的一些日志.
问题是当您在命令行上执行以下操作时:
perl myscript.pl | head -n 10
Run Code Online (Sandbox Code Playgroud)
这会导致脚本在输出10行后立即死亡,因此END
块不会执行,并且日志不会被压缩.有没有办法解决这个问题,并确保我的END
块中的代码仍然执行?
amo*_*mon 10
当管道的读取端关闭,并且写入过程试图将某些东西写入管道时,写入过程接收到SIGPIPE
.管道被称为破碎.
我们可以抓住这个事件
local $SIG{PIPE} = sub {
# This is our event handler.
warn "Broken pipe, will exit\n";
exit 1;
};
Run Code Online (Sandbox Code Playgroud)
这将优雅地退出您的程序.您可以给出字符串,而不是将子安装为事件处理程序IGNORE
.这会让你的脚本继续运行,好像什么也没发生.
# print will now return false with $!{EPIPE} true instead of dying
local $SIG{PIPE} = 'IGNORE';
Run Code Online (Sandbox Code Playgroud)