Что делает метод at объекта Mojo::Dom?

Только что наткнулся на следующий код:

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?


person user2198367    schedule 22.03.2013    source источник


Ответы (2)


at, в данном случае — это метод, вызываемый для переменной $dom, которая является экземпляром Mojo::DOM. В документации сказано, что метод at используется для

Найдите один элемент с помощью селекторов CSS. Поддерживаются все селекторы из Mojo::DOM::CSS.

person Tim Ebenezer    schedule 22.03.2013

Это особый случай find, который возвращает первое совпадение. find возвращает объект Mojo::Collection (благословенная ссылка на массив), заполненный объектами 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;

конечно в зависимости от специфики.

person Joel Berger    schedule 22.03.2013