информационная безопасность
без паники и всерьез
 подробно о проекте
Портрет посетителяСтрашный баг в WindowsГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 35 лет первому сообщению о Linux 
 FreeBSD полностью избавляется от... 
 Рекордный июльский патч - первая... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[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;
}
1





Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach