Perl 按字符而不是换行符打印管道
在Perl中,我现在喜欢这样:Perl 按字符而不是换行符打印管道,perl,split,newline,pipe,Perl,Split,Newline,Pipe,在Perl中,我现在喜欢这样: while (<$pipe>) { print $_; } while() { 打印美元; } 但这只是给出了逐行的输出。我如何打印,比如说,每个字符,或者用\r而不是\n分割。管道仅在换行符上向我提供数据 (我想打印另一个进程的输出,该进程正在使用\r打印其进程进度,这对我来说只是一个100%的简单行。Perl有一个“输入记录分隔符”$/的概念,通常设置为分隔行。你可以看报纸。无论何时从文件句柄读取行/记录,数据都会一直读取到文件末尾,或
while (<$pipe>)
{
print $_;
}
while()
{
打印美元;
}
但这只是给出了逐行的输出。我如何打印,比如说,每个字符,或者用\r
而不是\n
分割。管道仅在换行符上向我提供数据
(我想打印另一个进程的输出,该进程正在使用
\r
打印其进程进度,这对我来说只是一个100%的简单行。Perl有一个“输入记录分隔符”$/
的概念,通常设置为分隔行。你可以看报纸。无论何时从文件句柄读取行/记录,数据都会一直读取到文件末尾,或者直到读取了$/
变量中的当前字符串
例如:给定输入字节aabaa
和$/=“b”
,则my@records=
将生成('aab','aa')
。请注意,始终包含分隔符,但可以使用chomp
删除分隔符(无论分隔符设置为什么)
从文件读取时,必须在读取行之前设置$/
,如下所示:
local $/ = "\r"; # "local" avoids overriding this value everywhere
while(my $line = <$pipe>) {
chomp $line;
...
}
local$/=“\r”#“本地”可避免在任何地方覆盖此值
while(我的$line=){
chomp$行;
...
}
$/
有一些特殊值:
- 空字符串
将两个或多个连续的$/='
序列作为分隔符(“段落模式”)\n
- 如果设置为数字引用,则读取该数量的字符:
(以42个字符块读取)。在这种情况下,人们更愿意使用$/=\42
功能read
$/
变量中的当前字符串
例如:给定输入字节aabaa
和$/=“b”
,则my@records=
将生成('aab','aa')
。请注意,始终包含分隔符,但可以使用chomp
删除分隔符(无论分隔符设置为什么)
从文件读取时,必须在读取行之前设置$/
,如下所示:
local $/ = "\r"; # "local" avoids overriding this value everywhere
while(my $line = <$pipe>) {
chomp $line;
...
}
local$/=“\r”#“本地”可避免在任何地方覆盖此值
while(我的$line=){
chomp$行;
...
}
$/
有一些特殊值:
- 空字符串
将两个或多个连续的$/='
序列作为分隔符(“段落模式”)\n
- 如果设置为数字引用,则读取该数量的字符:
(以42个字符块读取)。在这种情况下,人们更愿意使用$/=\42
功能read
$/
中使用正则表达式的情况,但是有许多优点与此相反,因此没有人最终实现任何东西:-(但是,如果需要,可以重新分配记录分隔符,例如$/=“\n”如果$progress\u已完成
。好的,谢谢!是的,这是我下一步的想法..但这可能会变得相当笨拙,因为执行任意命令时会有不同的进度输出..无论如何,感谢您的澄清!有没有办法使用“\r | \n”?因为完成进度后,每行都用“\n”分隔@DavidEverlöf Nope,只能使用常量字符串(加上特殊大小写的段落模式)。允许在$/
中使用正则表达式经常出现在Perl5 Porters列表中,但有许多优点与此相反,因此没有人最终实现任何东西:-(不过,如果需要,您可以重新分配记录分隔符,例如,$/=”\n“如果$progress\u完成了”
。好的,谢谢!是的,这是我下一步想做的。但是,如果执行任意命令,并有不同的进度输出,这可能会变得相当笨拙。无论如何,感谢您的澄清!