Как поместить значения из HTML-тега массива дерева look_down в обычный массив в Perl?

Это фрагмент кода, который у меня есть:

#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use Time::Piece;
use HTML::Tree;

my $url0 = 'http://www.website.ch/blah.aspx';

my $doc0 = get($url0);

my $tree0 = HTML::Tree->new();
$tree0->parse($doc0);

my @juice = $tree0->look_down(
    _tag => 'option'
);

foreach ( @juice )
{
    print $_->as_HTML, "\n";
}

Я понимаю, что есть более простые способы сделать это — не стесняйтесь говорить об этих способах, но пока я делаю это так. Я хотел бы поместить все записи value в массив, поэтому, например, если один из моих (то, что я вызываю) элементов массива дерева look_down является следующим

<option value="YIDDSH">Yiddish</option>,

тогда я хотел бы как-то вставить "YIDDSH" (без кавычек) в массив и вытащить следующее значение из следующего элемента в массиве.


person user3333975    schedule 03.03.2014    source источник


Ответы (1)


Самый простой способ — использовать метод attr для извлечения содержимого атрибута value и карты для перебора всех элементов.

my @values = map { $_->attr('value') } @juice;
person cjm    schedule 03.03.2014
comment
Можете ли вы сопоставить и заменить в одной строке? То есть, что, если у меня есть value="PIG&PORK S", и я хочу заменить каждый экземпляр & на # и каждый экземпляр ` ` на 0. - person user3333975; 03.03.2014
comment
map { $_->attr('value') =~ s/&/#/rg =~ s/ /0/rg } (требуется 5.14+) - person ikegami; 03.03.2014