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

2023-12-31

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

while ($line = <$fh>) {
    if ($line =~ /<title>/.../<\/title>/) {
        # something...
    }
}

我不确定到底发生了什么.. and ...运营商。 以前当我使用双点运算符时..我会收到错误

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

但是,当我使用三点运算符改变图案时...错误不再发生并且脚本按预期工作。

我了解一般运营商的差异,但不了解这种情况。

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


perlop http://perldoc.perl.org/perlop.html#Range-Operators说这个

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

因此,使用三个点,您的代码将不会注意到结束</title>如果它与开始标记出现在同一行。

然而,问题是你正在测试<title> in $line and </title> in $_。你的意思是

if ($line =~ /<title>/ .. $line =~ /<\/title>/) { ... }

But 请不要这样做!您可能认为它按原样工作,但显然您已经运行了错误的代码。正则表达式是处理 XML 的错误工具:请使用XML::Twig https://metacpan.org/module/XML::Twig or XML::LibXML https://metacpan.org/module/XML::LibXML反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 双点范围运算符 .. 与三点范围运算符 ... 的相关文章

随机推荐