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

时间:2015-09-02 11:23:28

标签: 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;
}

1 个答案:

答案 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;