3

刚刚遇到以下代码:

use warnings;
use strict;
use Data::Dumper;
use lib './lib/lib/perl5';

use Mojo::DOM;

my $dom = Mojo::DOM->new($html);
my $table = $dom->at('table');
for my $record ($table->children('tr')->each) 
my %record = map { $_->text } $record->children('td')->each;

该方法在这里究竟做了at什么?

4

2 回答 2

7

find它是返回第一个匹配项的特殊情况。find返回一个Mojo::Collection对象(blessed arrayref),其中填充了Mojo::DOM表示匹配的对象。使用时,at您会直接将第一个匹配项作为Mojo::DOM对象。这只是方便。其实方法就是

sub at { shift->find(@_)->[0] }

提供的代码跳过了 Mojo::Collection 的一些功能。我可以把上面写成:

my $dom = Mojo::DOM->new($html);
my @records = $dom->at('table')->find('tr td')->pluck('text')->each;

当然要看具体情况。

于 2013-03-22T15:10:59.710 回答
7

at,在这种情况下,是在变量上调用的方法,该$dom变量是 的实例Mojo::DOM。文档告诉我们该at方法用于

使用 CSS 选择器查找单个元素。支持 Mojo::DOM::CSS 中的所有选择器。

于 2013-03-22T13:20:58.370 回答