每个字符打印管道而不是换行符

时间:2014-02-06 08:42:50

标签: perl split newline pipe

在Perl中,我现在喜欢这样:

while (<$pipe>)
{
    print $_;
}

但这只是给我输出行。我怎样才能让这个印刷品说出,每个字符,或者按\r而不是\n分割。管道只向我提供换行数据。

(我想打印另一个进程的输出,并且该进程正在使用\r来打印其进程进度,这最终只是一个简单的行,100%对我来说..)

1 个答案:

答案 0 :(得分:4)

Perl有一个“输入记录分隔符”$/的概念,它通常设置为单独的行。您可以阅读full documentation here。无论何时从文件句柄读取行/记录,都会读取数据直到文件结尾,或直到读取$/变量中的当前字符串为止。

例如:给定输入字节aabaa$/ = "b",然后my @records = <$fh>将产生('aab', 'aa')。请注意,始终包含分隔符,但可以使用chomp删除(无论分隔符设置为什么)。

从文件中读取时,必须在读取行之前设置$/,如下所示:

local $/ = "\r"; # "local" avoids overriding this value everywhere
while(my $line = <$pipe>) {
  chomp $line;
  ...
}

$/有一些特殊值:

  • 空字符串$/ = ''将两个或多个连续\n s的序列视为分隔符(“段落模式”)。
  • 如果设置为数字引用,则读取该字符数:$/ = \42(以42个字符的块读取)。在这种情况下,人们宁愿使用read函数。