Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Perl] Трабл! Не пойму в чем! Помогите пожалуйста 18.04.02 18:37
Автор: BXS Статус: Незарегистрированный пользователь
|
ЗАДАЧА: написать функцию которая на входе глотает HTML страницу ($string) и на выходе выплевывает массив (@array) с URL, отобранными по некоторому критерю
РЕАЛИЗАЦИЯ: процедура на входе берет 2 аргумента: а) саму страницу и б) режим выборки(0 - поиск только ссылок на .TXT ресурсы, 1 - поиск ссылок на .JPG ресурсы.
ПРОБЛЕМА: использую HTML::LinkExtor из примера в книги, но у метода какая-то странная работа с памятью: если я вызываю свою функцию первый раз и ище TXT ссылки, она к примеру находит 10. когда же после этого запрашиваю JPG ссылки (которых в документе всего 5), он возращает ОПЯТЬ ССЫЛКИ на TXT и на JPG = 15 ссылок. Если процедуру вызвать еще раз - то она ко всем когда либо найденным объектам еще добавит....так и растет снежный ком... Короче баг в том, что он не очищает внутренний буфер.. ПОЧЕМУ ЧЕРТ ВОЗЬМИ? как это исправить? подскажите пожалуйста!
вот код:
sub ParseUrl(){
my $Temp=$_[0];
$base_url = shift;
$parser = HTML::LinkExtor->new(undef,$base_url);
$parser->parse($Temp)->eof;
@Links=$parser->links;
foreach $linkarray(@Links){
my @element = @$linkarray;
my $elt_type = shift @element;
while(@element){
my ($Obj,$Url) = splice(@element, 0, 2);
if($_[1]==0){ # ищем TXT
$Urls.="$Url " if $Url =~/\.txt/gi;}
if($_[1]==1){ # ищем JPG
$Urls.="$Url " if $Url =~/\.jpg/gi;}
}
}
}
return split / /,$Urls;
}
|
|
|