Perl将print保存为变量

时间:2012-02-22 15:26:54

标签: perl

我有一个命令

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 个答案:

答案 0 :(得分:2)

如果您知道$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);

答案 1 :(得分:2)

您的第一个代码段相当于:

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);