Mojo::DOM - 如何 return 多个属性

Mojo::DOM - How to return more than one attribute

我是 Mojolicious 的新手,要在带有 class 模块的 p 标签中找到 link 的标题,例如

<p class="Module"><a class="story" href="http://intranet/blah" >Link Text is here</a></p>

我使用以下代码:

my $dom = Mojo::DOM->new( $page );

for my $elm ( $dom->find('p.Module > a.story')->each ){
    print $elm->text ."\n";
}

很粗糙,但很实用。我还不知道(对我来说晚上可能太晚了)是如何 return href 和 link 文本。请把我从痛苦中解救出来。

您只需要 attr 方法:

my $dom = Mojo::DOM->new( $page );

for my $elm ( $dom->find('p.Module > a.story')->each ){
    print $elm->text, ' ', $elm->attr('href'), "\n";
}

有关 Mojo::UserAgent and Mojo::DOM, check out Mojocast episode 5

的快速教程

这是一种使用 Mojo::Collectionmap:

的神奇方法
use v5.10;

use Mojo::DOM;
use Data::Dumper;

my $page =<<'HTML';
<p class="Module"><a class="story" href="http://intranet/blah" >Link Text is here</a></p>
HTML

my $dom = Mojo::DOM->new( $page );

my @links = $dom
    ->find('p.Module > a.story')
    ->map( sub { [ $_->text, $_->attr( 'href' ) ] } );

say Dumper \@links;