Perl 按字符而不是换行符打印管道

Perl 按字符而不是换行符打印管道,perl,split,newline,pipe,Perl,Split,Newline,Pipe,在Perl中,我现在喜欢这样: while (<$pipe>) { print $_; } while() { 打印美元; } 但这只是给出了逐行的输出。我如何打印,比如说,每个字符,或者用\r而不是\n分割。管道仅在换行符上向我提供数据 (我想打印另一个进程的输出,该进程正在使用\r打印其进程进度,这对我来说只是一个100%的简单行。Perl有一个“输入记录分隔符”$/的概念,通常设置为分隔行。你可以看报纸。无论何时从文件句柄读取行/记录,数据都会一直读取到文件末尾,或

在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
    功能

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
    功能

你能试试这个吗<代码>$/=“\r”我应该把这个放在哪里?在循环之前?是的。你能试试这个吗<代码>$/=“\r”我应该把这个放在哪里?在循环之前?是的。有没有办法使用“\r | \n”?因为在完成进度后,每行都用“\n”@DavidEverlöf Nope分隔,所以只能使用常量字符串(加上特殊大小写段落模式)。Perl5 Porters列表中经常会出现允许在
$/
中使用正则表达式的情况,但是有许多优点与此相反,因此没有人最终实现任何东西:-(但是,如果需要,可以重新分配记录分隔符,例如
$/=“\n”如果$progress\u已完成
。好的,谢谢!是的,这是我下一步的想法..但这可能会变得相当笨拙,因为执行任意命令时会有不同的进度输出..无论如何,感谢您的澄清!有没有办法使用“\r | \n”?因为完成进度后,每行都用“\n”分隔@DavidEverlöf Nope,只能使用常量字符串(加上特殊大小写的段落模式)。允许在
$/
中使用正则表达式经常出现在Perl5 Porters列表中,但有许多优点与此相反,因此没有人最终实现任何东西:-(不过,如果需要,您可以重新分配记录分隔符,例如,
$/=”\n“如果$progress\u完成了”
。好的,谢谢!是的,这是我下一步想做的。但是,如果执行任意命令,并有不同的进度输出,这可能会变得相当笨拙。无论如何,感谢您的澄清!