程序无法识别Perl中的全局变量
它什么都不打印为什么 根据我对Perl的理解,它应该知道$imge,即使它在函数中 我是Perl新手,所以如果有人能告诉我出了什么问题,我会很高兴。在调用$LinkExtor->parse$URL之后,您将$imge设置为空字符串 请注意这些要点 您必须始终使用strict和use warnings,并使用my声明所有变量,尽可能接近它们的第一个使用点 正确缩进代码,特别是在寻求帮助时。这将有助于你在自己的程序中更好地看到结构,如果你请求帮助,提供一些可读性差的东西是一件简单的礼貌事 Perl变量名应该只包含小写字母、数字或下划线。大写字母用于全局标识符,如包名 你错过了散列的要点。无需搜索散列的键-您可以使用与访问数组元素相同的方式直接访问散列元素,因此内部foreach循环应仅为$imge=$links{src}\n 我假设您想要打印每个attAttribute,因此您应该将该属性的值附加到$imge。目前,每次找到新值时,您只是替换该值,因此只会打印最后一个值 这种重构应该适合您,尽管我还没有测试过程序无法识别Perl中的全局变量,perl,Perl,它什么都不打印为什么 根据我对Perl的理解,它应该知道$imge,即使它在函数中 我是Perl新手,所以如果有人能告诉我出了什么问题,我会很高兴。在调用$LinkExtor->parse$URL之后,您将$imge设置为空字符串 请注意这些要点 您必须始终使用strict和use warnings,并使用my声明所有变量,尽可能接近它们的第一个使用点 正确缩进代码,特别是在寻求帮助时。这将有助于你在自己的程序中更好地看到结构,如果你请求帮助,提供一些可读性差的东西是一件简单的礼貌事 Perl变
use LWP::Simple;
use HTML::LinkExtor;
$user = 'a***.***'; # Enter your username here
$pass = '***733 '; # Enter your password here
$home = "http://37.48.90.31";
$URL = get("$home/c/test.cgi?u=$user&p=$pass");
$LinkExtor = HTML::LinkExtor->new(\&links);
$LinkExtor->parse($URL);
$imge="";
sub links
{
($tag,%links)= @_;
if ($tag eq "img") {
foreach $key (keys %links) {
if ($key eq "src")
{
$imge = "$links{$key}\n";
}
}
}
}
print $imge;
请帮自己一个忙,至少使用严格甚至更好的警告。这些帮助您自己更好地发现问题。适当的缩进也有帮助。此外,在调用LinkExtor后将$imge设置为,这样在打印变量之前删除$imge中的任何内容。
use strict;
use warnings;
use LWP::Simple;
use HTML::LinkExtor;
my $user = 'a***.***';
my $pass = '***733 ';
my $home = 'http://37.48.90.31';
my $url = get("$home/c/test.cgi?u=$user&p=$pass");
my $link_extor = HTML::LinkExtor->new(\&links);
my $imge;
$link_extor->parse($url);
print $imge;
sub links {
my ($tag, %links) = @_;
$imge .= "$links{src}\n" if $tag eq 'img' and exists $links{src};
}