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::Twig
或
XML::LibXML
替代.