Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
程序无法识别Perl中的全局变量_Perl - Fatal编程技术网

程序无法识别Perl中的全局变量

程序无法识别Perl中的全局变量,perl,Perl,它什么都不打印为什么 根据我对Perl的理解,它应该知道$imge,即使它在函数中 我是Perl新手,所以如果有人能告诉我出了什么问题,我会很高兴。在调用$LinkExtor->parse$URL之后,您将$imge设置为空字符串 请注意这些要点 您必须始终使用strict和use warnings,并使用my声明所有变量,尽可能接近它们的第一个使用点 正确缩进代码,特别是在寻求帮助时。这将有助于你在自己的程序中更好地看到结构,如果你请求帮助,提供一些可读性差的东西是一件简单的礼貌事 Perl变

它什么都不打印为什么

根据我对Perl的理解,它应该知道$imge,即使它在函数中

我是Perl新手,所以如果有人能告诉我出了什么问题,我会很高兴。

在调用$LinkExtor->parse$URL之后,您将$imge设置为空字符串

请注意这些要点

您必须始终使用strict和use warnings,并使用my声明所有变量,尽可能接近它们的第一个使用点

正确缩进代码,特别是在寻求帮助时。这将有助于你在自己的程序中更好地看到结构,如果你请求帮助,提供一些可读性差的东西是一件简单的礼貌事

Perl变量名应该只包含小写字母、数字或下划线。大写字母用于全局标识符,如包名

你错过了散列的要点。无需搜索散列的键-您可以使用与访问数组元素相同的方式直接访问散列元素,因此内部foreach循环应仅为$imge=$links{src}\n

我假设您想要打印每个attAttribute,因此您应该将该属性的值附加到$imge。目前,每次找到新值时,您只是替换该值,因此只会打印最后一个值

这种重构应该适合您,尽管我还没有测试过

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