Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

HTML::LinkExtor -- тормоз?

2.5K
11 июля 2004 года
murat
19 / / 25.02.2004
такая вот функция
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))
все чудесно работает

в чем дело? кто нибудь может знает?
300
12 июля 2004 года
ReDrum
689 / / 20.04.2000
На первый взгляд интерпретатор должен ругнуться на переменную @a! аля
Variable "@a" will not stay shared

Вот что на коленке набрасал. Может поможет ;)=

Код:
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;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог