我正在使用HTML::TreeBuilder来解析一些HTML。
您可以在“look_down”例程中指定多个类吗?
使用 -
搜索HTML时的情况for ( $tree->look_down( 'class' => 'postbody'))
我也是在同一个循环中搜索另一个类'postprofile'
。
有没有办法这样做而不必使用新的 - for ( $tree->look_down( 'class' => 'postprofile' ))
因为这会带回两组结果,而我只想要一个合并集。
我尝试过使用 - for ( $tree->look_down( 'class' => 'postbody||postprofile'))
然而,这不起作用,
提前谢谢。
答案 0 :(得分:9)
尝试使用模式而不是字符串,即
$tree->look_down( 'class' => qr/^(?:postbody|postprofile)$/)
答案 1 :(得分:1)
我将假设您没有阅读文档,因为您无法找到它们。让我们解决 问题:
如何查找您需要的文档
<强>在线:强>
search.cpan.org是一个用于搜索CPAN模块及其文档的主要网站。那里可以找到很多东西。
perldoc.perl.org在线提供了几个最新版Perl的完整运送文档。
命令行:
perldoc
显示的目录列出了您可以仔细阅读的文档的不同部分。
perldoc -f function
是一种快速搜索perlfunc的方法,只能查看一个函数的信息。这是一个非常方便的快速参考。
perldoc Module::Name::Here
会向您显示模块的文档。
perldoc perlpod
是读取的文档的一部分,在这种情况下对POD格式化所述制品的样品。
我读了哪些内容?
这一切都很棒,但你怎么知道在哪里看?我的意思是,我有一个名为“look_down”的东西,我正在使用它。文档在哪里?
在这种情况下,您可以看到“look_down”总是像$somevar->look_down(blarg)
一样被调用。找到$somevar
的来源。它是一个什么样的对象?最糟糕的情况是,你发现它是其他一些调用的结果,现在你必须找到那个调用的文档并查看返回的内容。但步骤是一样的。递归推进。最终你会得到my $tree = HTML::TreeBuilder->new_from_content()
或类似的东西。现在,您可以阅读HTML :: TreeBuilder中的new_from_content
文档。嘿,我们得到一个HTML :: Tree对象,它是HTML :: Element的子类!所以我们检查两个班级。哇,look_down在HTML :: Element。
如果你有从其他模块导入的例程,这有点棘手。希望你的代码的作者足够周到,明确地列出他的例程来自哪里:
use Some::Module qw( useful_sub confusing_sub );
这意味着useful_sub
和confusing_sub
来自Some::Module
;
如果你运气不好,你的作者只写了use Some::Module;
,这意味着你得到了所有的默认出口。这意味着您需要阅读文档以找出导入的内容。
出于可维护性的考虑,您可以通过始终准确指定从函数导入的例程来减少此噩梦。如果要导入NOTHING,可以将其指定为:use Some::Module ();
在寻找普通的子名时,有必要记住它们可能是实际的功能。所以不要忘记搜索perldoc。
最后,我希望你觉得这很有用。 R-ing TFM是一种非常强大的技术,学习如何找到相关文档是解锁权力的隐藏技能。 Perl有大量的文档可供浏览,当你不知道在哪里看时,它可能会令人生畏。