为什么 MATCHES WITH 条件不匹配两次

Why MATCHES WITH condition doesn't match twice

我有一个脚本可以解析文件中一些与单元格相关的数据。

这是脚本:

use strict;
use warnings;

while (my $line = <DATA>) {
    print "Hi - $line" if ($line =~ /^END$/);
}

__DATA__
MANAGED DATA
SITE                CELL                MODEL
ABC                 123                 M12
END


CONNECTION DATA
UNIT               CELL
U123               456
END

实际上它打印输出为:

Hi - END

我原以为它会打印两次输出(即 Hi - END),因为文件中有两个 END 关键字。

当我从正则表达式匹配 (if ($line =~ /END/);) 中删除 ^$ 时,它可以打印两次 Hi - END。但是对于 ^$ 它只打印一次。为什么会这样?

结尾 END 前后有一些隐藏文本。换行前的尾随空格,也许?更具体地说,也许是马车 return?

要查看您拥有的内容,您可以使用以下内容:

use Data::Dumper;

local $Data::Dumper::Useqq = 1;
print(Dumper($line));

如果是尾随空格,使用 s/\s+\z// 而不是 chomp 将清除它。