我想过滤自己的输出而不为此编写单独的程序。有可能适应的perl5解决方案。是否有更好的东西可以像新语言一样支持?
head(100);
while (<>) {
print;
}
sub head {
my $lines = shift || 20;
return if $pid = open(STDOUT, "|-");
die "cannot fork: $!" unless defined $pid;
while (<STDIN>) {
print;
last unless --$lines ;
}
exit;
}
答案 0 :(得分:1)
@raiph评论给了我很多帮助
可以用所需的任何东西替换OUT类。这保留了IO::Capture::Simple似乎尚未存在的懒惰。
此示例执行非常简单的重复行删除
my $undecorated_out = $*OUT;
my $decorated_out = class {
my @previous="nothing";
method print(*@args) {
my @toprint;
if @args[0] eq @previous[0] {
@toprint = ("...\n")
}else{
@toprint = @args;
}
$undecorated_out.print(@toprint) ;
@previous = @args unless @args[0] eq "\n";
}
method flush {}
}
$*OUT = $decorated_out;