在HTML :: Element的look_down例程Perl中指定多个类?

时间:2011-07-13 10:49:50

标签: perl class for-loop html-tree

我正在使用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')) 然而,这不起作用,

提前谢谢。

2 个答案:

答案 0 :(得分:9)

尝试使用模式而不是字符串,即

$tree->look_down( 'class' => qr/^(?:postbody|postprofile)$/)

答案 1 :(得分:1)

Jambo,我并不想变得粗鲁,但请阅读手册。我添加了你问题的链接。

我将假设您没有阅读文档,因为您无法找到它们。让我们解决 问题:

如何查找您需要的文档

<强>在线:

  • 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_subconfusing_sub来自Some::Module;

如果你运气不好,你的作者只写了use Some::Module;,这意味着你得到了所有的默认出口。这意味着您需要阅读文档以找出导入的内容。

出于可维护性的考虑,您可以通过始终准确指定从函数导入的例程来减少此噩梦。如果要导入NOTHING,可以将其指定为:use Some::Module ();

在寻找普通的子名时,有必要记住它们可能是实际的功能。所以不要忘记搜索perldoc。

最后,我希望你觉得这很有用。 R-ing TFM是一种非常强大的技术,学习如何找到相关文档是解锁权力的隐藏技能。 Perl有大量的文档可供浏览,当你不知道在哪里看时,它可能会令人生畏。