text for $d-6ren">
gpt4 book ai didi

perl - 高级 perl 语法 - Mojo::DOM

转载 作者:行者123 更新时间:2023-12-01 07:07:26 26 4
gpt4 key购买 nike

我正在尝试了解一些高级(对我而言)perl 语法,用于在 this tutorial 之后使用 DOM 进行 html 解析:

say "div days:";
say $_->text for $dom->find('div.days')->each;

say "\nspan hours:";
say $_->text for $dom->find('span.hours')->each;

这个语法是什么意思?这是一个什么样的循环?经典建筑看起来像这样: for(i=0;i<10;i++){ code }不是: {code} for (some_condition)
在这种情况下,“每个”关键字的含义是什么?它与 each Perl builtin function 有什么共同点吗?还是特定于 Mojo::DOM?我想如果 each在 Mojo::Dom 下,应该在 Mojo::DOM 主页上提及。但我没有发现任何提及 eachmethods section of their site ,所以它必须是 Perl 的内置函数。但是,这个内置的 each函数的语法完全不同——这怎么可能?

教程页面的另一个示例
say "Open Times:";
say for $dom->find('div.openTime')
->map(sub{$_->children->each})
->map(sub{$_->text})
->each;

与上述 map 的问题相同和 sub 方法。
  • 这些“Perlish”代码可以以更“C 风格”的方式重写,以便我理解吗?
  • 最重要的是:如何列出 Mojo::DOM 中包含的所有方法的参数和返回值?它必须以某种方式完成,因为我读到即使对于 Perl 也有带有智能感知(自动完成)的 IDE,所以这个 IDE 必须知道方法返回值类型等。
  • 最佳答案

    say "Open Times:";
    say for $dom->find('div.openTime')
    ->map(sub{$_->children->each})
    ->map(sub{$_->text})
    ->each;

    所有这些关键字( findmapeach )实际上是 不是关键字但是来自 Mojo::DOM 的方法。您可以通过 -> 识别它们运算符(operator)。

    在这种情况下,几个 methods have been chained together .只有当它们中的每一个都再次返回其对象(在本例中为 $dom )时,这才有可能。这种链接经常用在 JavaScript 中,尤其是现代框架,如 jQuery .它使代码易于阅读并节省操作。

    基本上,您在一个链中应用多个事务。
  • find 所有元素 'div.openTime'
  • map (用给定的 sub 对它们中的每一个做一些事情)(这是一个实际的 Perl sub):
  • 全部获取 children 当前元素的集合
  • 并列出 each 其中(如,返回一个数组)
  • map他们有一个给定的子:
  • 摘录 text 来自元素
  • 的内容
  • 并列出 each其中

  • 所有这些都包含在后缀 foreach 中(正如@Quentin 所说)。 say 是您可以使用 use features qw(say) 加载的功能.它结合了 print和一个换行符。

    也许现在更清楚这里发生了什么:
    my $collection1 = $dom->find('div.oopenTime');

    my $collection2 = $collection1->map(
    sub {
    my $collection = $_->children;
    return $collection->each;
    }
    );

    my collection3 = $collection2->map(
    sub {
    return $_->text;
    }
    );

    foreach my $text ($collection3) {
    say $text;
    }

    提供自动完成功能的 IDE 通常会扫描相关代码以了解对象具有的方法。看看 How do I list available methods on a given object or package in Perl?或阅读模块的代码。更好的是: 阅读文档 .

    关于perl - 高级 perl 语法 - Mojo::DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12819150/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com