为什么 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
将清除它。
我有一个脚本可以解析文件中一些与单元格相关的数据。
这是脚本:
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
将清除它。