while ($_ ne ' \n')
没有检测到输入是否为空行并且在不确定的情况下循环。为什么呢?
答案 0 :(得分:3)
取决于“空行”的意思。
该行是否不包含换行符以外的字符?
if ($_ eq "\n") # Note, \n only means newline in a double quoted string.
或者
if (/^$/)
该行只包含空格字符
if (/^\s*$/)
但是,如果您反转逻辑以说明该行不包含任何非空格字符,则会更容易
if (! /\S/)
其中一个应该做你想做的事。
答案 1 :(得分:1)
我曾经使用这个正则表达式来跨平台匹配CRLF字节:
/(\r?\n|\r\n?)+$/
所以你可以用这个匹配空行的/^\s*$/
组合它:
use strict;
use warnings;
...
open my $txtF,"$ARGV[0]";
for my $line (<$txtF>) {
$line =~ s/(\r?\n|\r\n?)+$//; # strips all CRLF bytes at the end
if ($line !~ /^\s*$/) { # now check if the line is not empty
# do stuff
...
# $line .= "\n"; if you need
next;
}
}
...
close $txtF;
...
答案 2 :(得分:1)
你可以在循环中执行如下所示的操作:
if ($_ =~/^$/) {
...
}
答案 3 :(得分:0)
这取决于您在文件中的阅读方式。可能会删除换行符。您通常只需将文件读作while ( <> ) { ... }
。
答案 4 :(得分:0)
像这样的东西
while(<>){
if(/^$/){
print "empty line";
}else{
print $_;
}
}
它将在命令行中打开指定为arg0的文件,并打印除空之外的每一行。 &LT;&GT;将每个读取行放在$ _中,这在if语句中隐式使用。