Seguindo o link do mantovani <a href="http://www.perl-community.de/bat/poard/thread/14778">http://www.perl-community.de/bat/poard/thread/14778</a> , e se você olhar no perldoc também vai fazer<br>O modulo é alpha, então isso pode acontecer, se isso for uma coisa critica para sua aplicação escolhe outro modulo, ou manda um patch pro cara :D<br>
<br><br><br><div class="gmail_quote">2010/4/16 Andre Carneiro <span dir="ltr">&lt;<a href="mailto:andregarciacarneiro@gmail.com">andregarciacarneiro@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br><br><div class="gmail_quote">Em 16 de abril de 2010 15:47, Daniel de Oliveira Mantovani <span dir="ltr">&lt;<a href="mailto:daniel.oliveira.mantovani@gmail.com" target="_blank">daniel.oliveira.mantovani@gmail.com</a>&gt;</span> escreveu:<div>
<div></div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div>2010/4/16 Andre Carneiro &lt;<a href="mailto:andregarciacarneiro@gmail.com" target="_blank">andregarciacarneiro@gmail.com</a>&gt;:<br>


</div><div><div></div><div>&gt; Bom dia !<br>
&gt;<br>
&gt; Estou fazendo um spider e estou tendo problemas para retirar o  objeto<br>
&gt; WWW::Scripter da memória.<br>
&gt;<br>
&gt; Esse módulo é bem interessante para evitar que você tenha que estudar o<br>
&gt; Javascript que o &#39;brilhante&#39; designer fez e devolve a saída desse Javascript<br>
&gt; em formato HTML. Até aí, tudo bem! Funciona! Maravilha!<br>
&gt;<br>
&gt; O problema é que eu preciso que isso funcione em um spider onde eu tenho<br>
&gt; várias iterações com esse objeto, e para cada &#39;get&#39; que ele faz em cima de<br>
&gt; uma página, ele reserva um novo espaço na memória que não libera nunca.<br>
&gt;<br>
&gt; Lendo a documentação, eu vi que existe um método &#39;clear_history&#39;, mas<br>
&gt; aparentemente não serve para isso que eu estou querendo. Tentei forçar uma<br>
&gt; chamada para DESTROY, mas também não está funcionando. Abaixo tem um<br>
&gt; segmento de código que pode ajudar vocês a me ajudarem.<br>
&gt;<br>
&gt; &lt;code&gt;<br>
&gt; .<br>
&gt; .<br>
&gt; .<br>
&gt;     my $scripter = WWW::Scripter-&gt;new;<br>
&gt;     $scripter-&gt;use_plugin(&#39;JavaScript&#39;);<br>
&gt;     $scripter-&gt;max_history(1);<br>
&gt;     while(defined($tree)){<br>
&gt;         my @products =<br>
&gt; $tree-&gt;findnodes(&quot;/html/body/div[\@id=&#39;container&#39;]/div[\@id=&#39;geral&#39;]/center/div[\@id=&#39;centro&#39;]/div[\@id=&#39;centro2_int&#39;]/div[\@id=&#39;produtos-vitrine&#39;]/div&quot;);<br>
&gt;<br>
&gt;         print &quot;\n\n#################################ACHEI &quot; . @products .<br>
&gt; &quot;PRODUTOS!\n\n&quot;;<br>
&gt;         foreach my $p(@products){<br>
&gt;             if($p){<br>
&gt;                 print &quot;\n\n&quot; . $p-&gt;as_HTML;<br>
&gt;                 #link/imagem<br>
&gt;                 my ($prelink) = $p-&gt;findnodes(&#39;a&#39;);<br>
&gt;                 if($prelink) {<br>
&gt;                     my $u  = $prelink-&gt;attr(&#39;href&#39;);<br>
&gt;                     $u = decode_entities($u);<br>
&gt;                     $self-&gt;product-&gt;url_original($u);<br>
&gt;                     $self-&gt;product-&gt;url($self-&gt;product-&gt;url_original.<br>
&gt; &#39;&amp;frompartner=3212&#39;);<br>
&gt;                     my $preimg = $prelink-&gt;look_down(_tag =&gt; &#39;img&#39;);<br>
&gt;                     if($preimg){<br>
&gt;                         $self-&gt;product-&gt;imagem($preimg-&gt;attr(&#39;src&#39;));<br>
&gt;                     }<br>
&gt;<br>
&gt;                     #Capturando detalhes<br>
&gt; #                    print &quot;\n\nURL: &quot; . $self-&gt;product-&gt;url_original .<br>
&gt; &quot;\n\n&quot;;<br>
&gt;                     eval{$self-&gt;agent-&gt;get($self-&gt;product-&gt;url_original)};<br>
&gt;                     if($self-&gt;agent-&gt;success){<br>
&gt;                         $scripter-&gt;get($self-&gt;product-&gt;url_original);<br>
&gt;                         my $dtree     =<br>
&gt; HTML::TreeBuilder::XPath-&gt;new_from_content($self-&gt;agent-&gt;content);<br>
<br>
</div></div>                              Você colocou o $scripter-&gt;clear_history aqui ?<br>
<div><br>
<br>
&gt;                         $self-&gt;get_detail($dtree , $scripter);<br>
&gt;                      }else {<br>
&gt; .<br>
&gt; .<br>
&gt; .<br>
&gt;                      }<br>
&gt; .<br>
&gt; .<br>
&gt; .<br>
&gt;      }<br>
&gt; }<br>
&gt;<br>
&gt; &lt;/code&gt;<br>
&gt;<br>
<br>
</div>Como você só colocou um pedaço do código, não da para saber, o final.<br>
Você percebeu que você está iniciando um objeto TreeBuilder a cada<br>
iteração do laço que o request é realizado com sucesso, você está<br>
fazendo $dtree-&gt;delete ?<br>
<br></blockquote></div></div><div><br>O pedaço do código que eu coloquei é suficiente para ver como o treco está sendo usado entre as iterações. Não precisa de mais nada além daquilo. Além do mais eu isolei essa mesma parte no MEU código para poder observar e ainda sim continua acumulando o alocação de memória, ou seja, não está liberando a memória.<br>

 </div><div class="im"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
O módulo não tem nenhum &quot;Report Bug&quot;, se fosse problema do módulo de<br>
estourar a memória, com certeza alguém já teria reportado.<br>
<br>
<br></blockquote></div><div><br>Pode ser então que eu seja o primeiro a fazer um!  :D <br> <br></div><div class="im"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


Por tanto, se você ler na documentação tem um atributo chamado:<br>
max_docs, por favor quando você iniciar o objeto, mude-o para 1<br>
<br></blockquote></div><div><br>Eu já vi esses atributos e continua não liberando memória... :D<br><br> </div><div class="im"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


   my $script = WWW::Scripter-&gt;new(max_docs =&gt; 1, max_history =&gt; 1)<br>
<br>
&quot;The maximum number of document objects to keep in history (along with<br>
their corresponding request and response objects). If this is omitted,<br>
Mech&#39;s stack_depth + 1 will be used. This is off by one because<br>
stack_depth is the number of pages you can go back to, so it is one<br>
less than the number of recorded pages. max_docs considers 0 to be<br>
equivalent to infinity.&quot;<br>
<br></blockquote><div></div></div><div><br>Boa! Mas eu já tinha testado isso, e continua não liberando memória 
mesmo assim.<br>Mas é um bom lugar pra começar a fuçar no código...<br><br> </div><div class="im"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

Isso não é nada mais do que o atributo, &quot;stack_depth&quot; do Mechanize que<br>
guarda os históricos do get, se não me falhe minha memória.<br>
<a href="http://search.cpan.org/%7Esprout/WWW-Scripter-0.010/lib/WWW/Scripter.pod" target="_blank">http://search.cpan.org/~sprout/WWW-Scripter-0.010/lib/WWW/Scripter.pod</a><br>
<br>
Estou esperando, para saber se agora funcinona, ok!<br>
<br></blockquote><br></div>Acho que isso não vai rolar tão cedo... de qq forma obrigado!<br><br><br>Cheers!<br><div> <br></div></div>-- <br><div><div></div><div class="h5">André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>
(11)82907780<br>
</div></div><br>_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br></blockquote></div><br><br clear="all"><br>-- <br>lorn at lornlab dot org<br>Lindolfo &quot;Lorn&quot; Rodrigues<br>
<br>