Perl双点范围运算符.. vs三点...

5 perl

我正在扫描XML文件并遍历文档中的每一行:

while ($line = <$fh>) {
    if ($line =~ /<title>/.../<\/title>/) {
        # something...
    }
}
Run Code Online (Sandbox Code Playgroud)

我不确定在.....运营商方面究竟发生了什么.以前当我使用双点运算符时,..我会收到错误

在模式匹配中使用未初始化的值$ _(m //)

但是,当我使用三点运算符更改模式时...,错误不再发生,脚本按预期工作.

我理解运营商的差异,但不是在这种背景下.

任何解释这一点的帮助将不胜感激.

Bor*_*din 11

perlop 这样说

如果您不希望它在下一次评估之前测试正确的操作数,就像在sed中一样,只需使用三个点("...")而不是两个.在所有其他方面,"......"的行为就像"......"一样.

因此,对于三个点,</title>如果它与开始标记出现在同一行,则代码将不会注意到结束.

但是,问题在于您正在测试<title>in $line</title>in $_.你的意思是

if ($line =~ /<title>/ .. $line =~ /<\/title>/) { ... }
Run Code Online (Sandbox Code Playgroud)

请不要这样做!您可能认为它可以正常工作,但您显然已经运行了错误的代码.正则表达式是处理XML的错误工具:请使用 XML::TwigXML::LibXML 替代.