如何在 perl6 中过滤自己的输出?

How to filter own output in perl6?

我想过滤自己的输出而无需为此编写单独的程序。有可能适用的 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;
}

@raiph 评论对我帮助很大

可以用任何需要的东西代替 OUT class。这保留了 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;