我有一个命令
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);
它不起作用。
有什么想法吗?
答案 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);