Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在perl中忽略多个换行符?_Perl - Fatal编程技术网

如何在perl中忽略多个换行符?

如何在perl中忽略多个换行符?,perl,Perl,假设我有一个包含以下输入的文件: line 1 line 2 line3 我的程序应该只存储“line1”、“line2”和“line3”,而不是换行符。我如何做到这一点? 我的程序已经删除了前导空格和尾随空格,但是删除换行符没有帮助。 我将$/as设置为\n,因为每个输入都由一个\n分隔。while(){ while (<>) { chomp; next unless /\S/; print "$_\n"; } 咀嚼; 下一个除非/\S/; 打印“

假设我有一个包含以下输入的文件:

line 1


line 2

line3
我的程序应该只存储“line1”、“line2”和“line3”,而不是换行符。我如何做到这一点? 我的程序已经删除了前导空格和尾随空格,但是删除换行符没有帮助。 我将$/as设置为\n,因为每个输入都由一个\n分隔。

while(){
while (<>) {
    chomp;
    next unless /\S/;
    print "$_\n";
}
咀嚼; 下一个除非/\S/; 打印“$\u\n”; }
设置

$/=q();#这是一个空字符串,如“”或“”
而{
咀嚼;
...
}

定义的空字符串的特殊值是如何告诉输入运算符将一个或多个换行符视为终止符(首选更多换行符),以及如何获取
chomp
以将它们全部删除。这样,每个记录总是以真实数据开始。

Perl-n相当于在脚本周围包装while(){}。假设您只需要消除空行,您可以这样做:

#! /usr/bin/perl -n
print unless ( /^$/ );
#! /usr/bin/perl -n
my @values;
push @values, $_ unless ( /^$/ );

END {
    # do whatever work you want to do here
}
。。。另一方面,如果这就是您所需要做的,那么您最好放弃perl并使用

grep -n '^$'
编辑:你的帖子说你想在行不是空的地方存储值。。。在这种情况下,假设脚本的其余部分没有太多工作要做,您可以执行以下操作:

#! /usr/bin/perl -n
print unless ( /^$/ );
#! /usr/bin/perl -n
my @values;
push @values, $_ unless ( /^$/ );

END {
    # do whatever work you want to do here
}

。。。但是,如果在END{}块中有很多代码,这很快就达到了限制返回的程度。

+1表示“$/=q()”。。。你让我在perldocperlvar中查找它。将Perl置于段落模式。将$/设置为空字符串。