В общем есть скрипт, который выбирает данные из базы(9000 записей). И потом для каждой записи лазит по инету собирает информацию...
DBI XML::Smart LWP::UserAgent HTTP::Cookies LWP::Simple
Возникла проблема, после 500 записей валится от отсутствия памяти. У меня используется рекурсия..
sub get_data
{
my ($name, $recurse) = @_;
my $comp_name = $name;
$comp_name =~ s/\\/\\\\/g;
$comp_name =~ s/\(/\\\(/g;
$comp_name =~ s/\)/\\\)/g;
$comp_name =~ s/\+/\\\+/g;
$comp_name =~ s/\./\\\./g;
$comp_name =~ s/\[/\\\[/g;
$comp_name =~ s/\]/\\\]/g;
$comp_name =~ s/\*/\\\*/g;
$comp_name =~ s/\?/\\\?/g;
$comp_name =~ s/\-/\\\-/g;
my @search_result = get_url('http://www.domen.com/cat.php', 'BOT', 0, 0, 0);
my $compare = '<a[\s]+href=page.php?ID=([0-9])>[\s]+'.$comp_name;
if ($search_result[1] =~ /$compare/i)
{
return $1;
}
else
{
my $recurse_name = $name;
if ($recurse == 0)
{
while ($recurse_name !~ /^[a-z0-9#@]/i)
{
$recurse_name =~ s/^.//;
}
while ($recurse_name !~ /[a-z0-9)]$/i)
{
$recurse_name =~ s/.$//;
}
$recurse += 1;
}
elsif ($recurse == 1)
{
$recurse_name =~ s/\(.+\)//g;
$recurse_name =~ s/\ /\_/g;
$recurse_name =~ s/\W//g;
$recurse_name =~ s/\_/\ /g;
$recurse_name =~ s/[\s]+/ /g;
$recurse +=1;
}
elsif ($recurse == 2)
{
return 0;
}
my $recurse_reply = get_data($recurse_name, $recurse);
return $recurse_reply;
}
}
Вот. И вот тут валится скрипт. Как можно перед вызовом рекурсии удалить переменные, чтоб освободить память????