我使用perl的XML::LibXML编写了一个程序
它使用 load_xml() 创建 XML::LibXML。
我很惊讶它不需要调用 new()。
什么时候需要调用new()?
这是令人惊讶的(对我来说)有效的代码:
#!/usr/bin/env perl
use 5.020;
use warnings;
use XML::LibXML;
#the input xml
my $inputstr = <<XML;
<a>
<b class="type1">some type 1 data</b>
<b class="type2">some type 2 data</b>
<b class="type3">some type 3 data</b>
<b class="type4">some type 4 data</b>
<b notaclass="type1">don't change this</b>
<c class="type1">don't change this either</c>
</a>
XML
my $dom = XML::LibXML->load_xml(
string => $inputstr
);
say $dom->toString();
XML::LibXML
使用一种方法同时充当对象和类方法的风格。这是为了方便。如果您调用XML::LibXML->load_xml
它,它将为您创建一个解析器对象,使用您的参数配置它,加载 XML,然后将解析器对象抛出。这意味着这两段代码是等效的。
当您想要更改默认解析器选项并重用解析器对象时。或者当您想要使用仅可用作对象方法的方法时。
例如,您可能希望将已配置的 XML 解析器传递到另一个函数,或使用它来配置另一个对象的行为。