<div dir="ltr">Já tá na hora do golf? :)<br><br><div class="gmail_quote">2008/9/11 Alexei Znamensky <span dir="ltr">&lt;<a href="mailto:russoz@gmail.com">russoz@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div dir="ltr">Mantovani,<br><br>Tem algumas melhorias a sugerir. Você não fechou o arquivo que abriu, e carregar o arquivo inteiro num vetor não é exatamente algo bom, e no seu caso, é completamente desnecessário. Se voce nao está na lista Cascavel-pm, entre, e olhe nos archives, tem um email do Nilson Santos Figueiredo Júnior, de ontem, que fala sobre a boa prática para abrir arquivos.<br>

<br>Então, vou primeiro passar o parte de mexer com arquivo, não vou nem olhar o resto.<br><br>-------------- original --------------<div class="Ih2E3d"><br>open(ARQ,&quot;&lt;2008q3.txt&quot;);<br>my @arquivo = &lt;ARQ&gt;;<br>
my @more = ();<br>
foreach (@arquivo){<br>my @more = unshift(@more,$1) if $_=~ /(\w{4,}\S+)\+\+/g<br>
}<br></div>-------------- original --------------<br><br>isso deveria, no mínimo, ser escrito assim:<br><br>----- v1 -----<br>open my $arq, &quot;&lt;&quot;, &quot;2008q3.txt&quot; or die &quot;Can&#39;t open 2008q3.txt&quot;;<br>

<br>
my @arquivo = &lt;$arq&gt;;<div class="Ih2E3d"><br>
my @more = ();<br>
foreach (@arquivo){<br>
my @more = unshift(@more,$1) if $_=~ /(\w{4,}\S+)\+\+/g<br>

}<br></div>close $arq;<br>
----- v1 -----<br>
<br>mas como eu te disse, carregar o arquivo no vetor (leia-se memória) é um desperdício de recursos, você só quer dar uma &quot;passada&quot; no conteúdo, então:<br><br>----- v2 -----<br>open my $arq, &quot;&lt;&quot;, &quot;2008q3.txt&quot; or die &quot;Can&#39;t open 2008q3.txt&quot;;<br>

<br>
my @arquivo = &lt;$arq&gt;;<br>
my @more = ();<br>
while( &lt;$arq&gt; ) {<br>&nbsp;&nbsp;
@more = unshift(@more,$1) if $_=~ /(\w{4,}\S+)\+\+/g;<br>

}<br>close $arq;<br>
----- v2 -----<br>
<br>Vamos olha para a linha dentro do loop agora. O unshift já modifica o vetor, você não precisa atribuir de volta. Se você está trabalhando com a variável $_, você pode &quot;sumir&quot; com ela. Além disso, você colocou &quot;my @more&quot; dentro e fora do loop, o que faz com que existam duas variáveis @more, uma em cada escopo. Então:<br>

<br>----- v3 -----<br>
open my $arq, &quot;&lt;&quot;, &quot;2008q3.txt&quot; or die &quot;Can&#39;t open 2008q3.txt&quot;;<br>
<br>

my @arquivo = &lt;$arq&gt;;<br>

my @more = ();<br>

while( &lt;$arq&gt; ) {<br>
&nbsp;&nbsp;
unshift( @more, $1 ) if /(\w{4,}\S+)\+\+/g;<br>


}<br>
close $arq;<br>

----- v3 -----<br><br>Agora uma melhoria: não seria muito&nbsp; mais legal se você pudesse fazer esse script funcionar com qualquer nome de arquivo? Você poderia executá-lo assim: &quot;quemtemmais 2008q4.txt&quot; e ele já ia ler o arquivo especificado na linha de comando. Para isso, simplificamos ainda mais:<br>

<br>----- v4 -----<br>my @more = ();<br>


while( &lt;&gt; ) {<br>

&nbsp;&nbsp;
unshift( @more, $1 ) if /(\w{4,}\S+)\+\+/g;<br>



}<br>


----- v4 -----<br>
v4-&gt;explicacao: se você usa o while( &lt;&gt; ), chamado de operador &quot;diamante&quot;, sem um descritor de arquivo, o perl irá: 1) caso haja parâmetros na linha de comando ele irá tentar abrí-los como arquivos e irá ler deles ou; 2) irá ler da entrada padrão, permitindo que você use o seu script com pipe, por exemplo &quot;cat 2007.txt 2008.txt | quemtemmais&quot;. O que simplifica bastante a sua vida ;-)<br>

<br>Provavelmente dá para melhorar mais, como por exemplo ao invés de fazer dois loops que passam pelo arquivo inteiro, fazer um loop só que executa as duas operações já de uma vez. <br><br>Mas popopor enquanto é só, pepepessoal.<br>

<br>[]s<br>Russo<br><br><div class="gmail_quote">2008/9/11 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><br>
<blockquote class="gmail_quote" style="border-left:1px solid rgb(204, 204, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex"><div><div></div><div class="Wj3C7c">
<div dir="ltr">Quem tem mais incremento em 2008 ?!?!<br>hehe<br>O Fernando me passou um desafio para ver quantos ++ cada um tem, o Eden^^ e o Blabos^^ me ajudaram.<br>wget <a href="http://mail.pm.org/pipermail/rio-pm/2008q3.txt" target="_blank">http://mail.pm.org/pipermail/rio-pm/2008q3.txt</a><br>


<br>depois<br><br>#!/usr/bin/perl<br><br>use strict;<br>use warnings;<br>open(ARQ,&quot;&lt;2008q3.txt&quot;);<br>my @arquivo = &lt;ARQ&gt;;<br>my @more = ();<br>foreach (@arquivo){<br>my @more = unshift(@more,$1) if $_=~ /(\w{4,}\S+)\+\+/g<br>


}<br>for (0 .. scalar(@more) -1){<br>$more[$_] =~ s/\s.*//<br>}<br>my %hash;<br>$hash{$_}++ for @more;<br>print &quot;$_ = $hash{$_}\n&quot; for keys %hash<br clear="all"><br>-- <br>Daniel de Oliveira Mantovani<br>&quot;A sede pelo aprendizado é insaciável&quot;<br>


<a href="http://mantovanihouse.blogspot.com/" target="_blank">http://mantovanihouse.blogspot.com/</a><br>------------------------------------------------------------<br>
</div>
<br></div></div>_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br></blockquote></div><br><br clear="all"><br>-- <br>Alexei Znamensky [russoz_gmail_com] [<a href="http://russoz.wordpress.com" target="_blank">russoz.wordpress.com</a>] [<a href="http://www.flickr.com/photos/alexeiz" target="_blank">www.flickr.com/photos/alexeiz</a>]<br>

&quot;Though we live in trying times, we&#39;re the ones who have to try&quot;<br>
</div>
<br>_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br></blockquote></div><br><br clear="all"><br>-- <br>Just another Perl Hacker,<br>Fernando (SmokeMachine)<br>
<a href="http://perl-e.org">http://perl-e.org</a><br>
</div>