在Perl中,我现在喜欢这样:
while (<$pipe>)
{
print $_;
}
但这只是给我输出行。我怎样才能让这个印刷品说出,每个字符,或者按\r
而不是\n
分割。管道只向我提供换行数据。
(我想打印另一个进程的输出,并且该进程正在使用\r
来打印其进程进度,这最终只是一个简单的行,100%对我来说..)
答案 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
函数。