Perl сохранить печать как переменную - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть команда

print $_->{href} . "\n" for $mech->find_link_dom(text_regex => qr/pdf/i);

, которая печатает точную ссылку, которую я хотел бы сохранить как переменную. Хотя когда я пытаюсь сделать

my $link = $_->{href} . "\n" for $mech->find_link_dom(text_regex => qr/pdf/i);

не работает.

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Ваш первый фрагмент кода эквивалентен:

for $_ ($mech->find_link_dom(text_regex => qr/pdf/i)) {
    print $_->{href} . "\n"
}

Второй эквивалентен:

for $_ ($mech->find_link_dom(text_regex => qr/pdf/i)) {
    my $link = $_->{href} . "\n";
}

Таким образом, переменная $link является локальной для блока forи не виден за пределами этого блока.Это будет работать, если вы сначала объявите переменную вне блока:

my $link;

for $_ ($mech->find_link_dom(text_regex => qr/pdf/i)) {
    $link = $_->{href} . "\n";
}

Или, используя краткую форму, как в вашем коде:

my $link;

$link = $_->{href} . "\n" for $mech->find_link_dom(text_regex => qr/pdf/i);
2 голосов
/ 22 февраля 2012

Если вы знаете, что $mech->find_link_dom(text_regex => qr/pdf/i) возвращает ровно один элемент, вы можете написать:

my $link = [$mech->find_link_dom(text_regex => qr/pdf/i)]->[0]->{href} . "\n";

Если он может вернуть несколько элементов - или ноль элементов - тогда, возможно, вы имеете в виду это:

my $link;
$link .= $_->{href} . "\n" for $mech->find_link_dom(text_regex => qr/pdf/i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...