use strict;
use warnings;
use HTML::LinkExtor;
&main();
sub main {
my $i = 0;
while ($i < 2) {
my $text = getContent($i);
links ($text);
$i++;
}
}
sub getContent {
my $line = shift;
my @arr = ("something", "test2");
return $arr[$line];
}
my @a;
sub links {
my $content = shift;
@a = ();
sub getLink {
my($tag, %attr) = @_;
push @a, $attr{'href'} if $attr{'href'} and ($tag eq 'a');
}
my $p = HTML::LinkExtor->new(\&getLink);
$p->parse($content);
print '~~~~~~~~~~~~~~';
print @a;
return @a;
}
HTML::LinkExtor -- тормоз?
sub links {
my $content = shift;
my @a;
sub getLink {
my($tag, %attr) = @_;
if ($tag eq 'a'){
if ($attr{'href'} ne '') {
push (@a, $attr{'href'});
}
}
}
my $p = HTML::LinkExtor->new(\&getLink);
$p->parse($content);
print '~~~~~~~~~~~~~~';
print @a;
return @a;
}
потом я вызываю эту функцию в цикле
while ($i < 5) {
#(getContent возвращает содержимое html страницы )
my $ text = getContent($i);
links ($text);
$i++;
}
и выводится только содержимое массива @a(см. функцию links) при первом вызове функции
хотя $content при выводе внутри функции нормальный
и еще если я просто пишу
links(getContent(3))
links(getContent(5))
links(getContent(48))
все чудесно работает
в чем дело? кто нибудь может знает?
Variable "@a" will not stay shared
Вот что на коленке набрасал. Может поможет ;)=
Код: