我正在扫描 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(使用前将#替换为@)