<div dir="ltr"><br>
<div class="gmail_quote">2008/9/16 Samir Cury <span dir="ltr">&lt;<a href="mailto:rimasy@gmail.com">rimasy@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div dir="ltr">faltava a virgula pra separar o FH do STDOUT, já está rodando<br><br>agora, esse FH eu posso usar como se fosse um array, só que a vantagem é que eu uso partes em partes na memória, ao invés de tudo de uma vez (diferente de arrays), certo?<br>
</div></blockquote>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><font face="courier new,monospace">Samir não querendo ser chato mas&nbsp;já sendo, não é correto você dizer que isto &#39;como se fosse um array&#39;. Isto não é um &#39;tipo de array&#39;, é um processo de abrir um recurso e efeutar uma leitura sequêncial deste.</font></div>

<div><font face="Courier New"></font>&nbsp;</div>
<div><font face="Courier New">Esta pequena diferença de conceito pode ser&nbsp;a diferença entre utilizar corretamente/ou não os recursos da linguagem, sendo algumas:</font></div>
<div><font face="Courier New"></font>&nbsp;</div>
<div><font face="Courier New">* o file handle não tem índice, então você não pode fazer algo do tipo &lt;$my_file_handle&gt;[-1] para ler a última linha do arquivo;</font></div>
<div><font face="Courier New">* quando falamos de file handle associamos automaticamente em &#39;while&#39; porquê ele trabalha com o buffer (como o Wendel já informou);</font></div>
<div><font face="Courier New">* quando falamos de array associamos automaticamente em for/foreach. o &#39;for&#39; exige já ter conhecimento do tamanho da lista, então se você utilizar &#39;for&#39; para um file handle, ele vai ter que ler todo o arquivo;</font></div>

<div><font face="Courier New"></font>&nbsp;</div>
<div><font face="Courier New">Como eu disse, é importante você utilizar os termos corretos para as tecnologia correta.</font></div>
<div><font face="Courier New"></font>&nbsp;</div>
<div><font face="Courier New"></font>&nbsp;</div>
<div>&nbsp;</div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div dir="ltr"><span id=""></span><br><br>&lt;code&gt; 
<div class="Ih2E3d"><br>open my $list_in_file , q[cat list.txt | ];<br>print &lt;$list_in_file&gt;;<br></div>&lt;/code&gt; 
<div>
<div></div>
<div class="Wj3C7c"><br>
<div class="gmail_quote"><br><br>2008/9/16 Alexei Znamensky <span dir="ltr">&lt;<a href="mailto:russoz@gmail.com" target="_blank">russoz@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">É, depois que eu mandei eu vi, mas achei que você fosse dizer alguma coisa ;-)<br><br>
<div class="gmail_quote">2008/9/16 Solli Honorio <span dir="ltr">&lt;<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>&gt;</span> 
<div>
<div></div>
<div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr"><br>
<div class="gmail_quote">2008/9/16 Alexei Znamensky <span dir="ltr">&lt;<a href="mailto:russoz@gmail.com" target="_blank">russoz@gmail.com</a>&gt;</span> 
<div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr"><br><br>
<div class="gmail_quote">
<div>2008/9/16 Samir Cury <span dir="ltr">&lt;<a href="mailto:rimasy@gmail.com" target="_blank">rimasy@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">Então pessoal,<br><br>Hoje tentei por em prática a dica do Solli, mas esbarrei em algumas coisas, a explicação resumão foi bem esclarescedora, mas me confirmem uma coisa:<br><br>quando eu dou por exemplo (nem sei se é possível, mas pelo visto sim)<br>
<br>foreach $i(&lt;$cmd_ls&gt;) { code; }<br><br>Eu não estaria ocupando memória tanto quanto usando um array porque eu estou lendo de um arquivo temporário que seria o STDOUT do comando ??</div></blockquote></div>
<div><br>Não porque debaixo dos panos o perl tá fazendo um fork, abrindo um processo novo, e delegando a comunicação entre processos para o sistema operacional - do mesmo jeito que funciona quando se usa um pipe na linha de comando. O pipe NÃO joga todo o stdout para a memória, ele vai lendo aos poucos em buffers dentro do kernel (naquele esquema producer/consumer, se você teve isso na faculdade ;-)<br>
&nbsp;</div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">outra, tentei usar esse codigo e nao tive muito sucesso :<br><br>open my $list_in_file q[cat list.txt | ];<br>print &lt;$list_in_file&gt;;</div></blockquote></div>
<div><br>tente qx[ cat list | ]<br></div></div></div></blockquote></div>
<div><br><span style="FONT-FAMILY: courier new,monospace">Na verdade não precisa do &#39;qx&#39; neste caso, é só ele descobrir onde&nbsp; o código dele está errada ;) !</span><br>&nbsp;</div>
<div>
<div></div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">
<div class="gmail_quote">
<div>&nbsp;<br></div>
<div>
<div></div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr"><br><br>não entendi muito bem, mas segui o modelo do solli<br><br>valeu! 
<div>
<div></div>
<div><br><br><br><br>
<div class="gmail_quote">2008/9/12 Solli Honorio <span dir="ltr">&lt;<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">
<div>2008/9/12 Samir Cury <span dir="ltr">&lt;<a href="mailto:rimasy@gmail.com" target="_blank">rimasy@gmail.com</a>&gt;</span><br></div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">Beleza Solli, só uma coisa<br></div></blockquote>
<div><br><span style="FONT-FAMILY: courier new,monospace">Só explico se tiver um shonorio++ :) !!!</span><br>&nbsp;</div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr"><br>
<div class="gmail_quote">2008/9/12 Solli Honorio <span dir="ltr">&lt;<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>&gt;</span> 
<div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">Grande pequeno gafanhoto Samir, este teu código está estranho... mas vou pular estar parte e&nbsp; vamos para o trabalho verdadeiro.. utilize o &#39;File::Find&#39;, a documentação é boa e tem uma caminhão de outros exemplos na internet !!!<br>
<br>Agora sobre o código :<br><br><br>
<div class="gmail_quote">2008/9/12 Samir Cury <span dir="ltr">&lt;<a href="mailto:rimasy@gmail.com" target="_blank">rimasy@gmail.com</a>&gt;</span> 
<div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">Então galera, meu problema é o seguinte, relacionar uma árvore de diretórios (no final cada arquivo) ao seu full path que seria a chave do hash, o conteúdo seria o tamanho.<br><br>Beleza, o du -ha me ajudaria nisso, mas ele não funciona no fs que estou usando, apenas ls -laR<br>
<br>Então o que pensei:<br><br>#!/usr/bin/perl<br>use diagnostics;<br><br>@list=`ls -lhR /pnfs/`;<br></div></blockquote></div>
<div><br><span style="FONT-FAMILY: courier new,monospace">evite isto, pelos motivos :</span><br style="FONT-FAMILY: courier new,monospace"><span style="FONT-FAMILY: courier new,monospace">1o. é difícil de ler, prefira qx/ls.../;</span><br style="FONT-FAMILY: courier new,monospace">
<span style="FONT-FAMILY: courier new,monospace">2o. não coloque o retorno todo numa array, você está consumindo muito recurso de memoria, prefira: </span><br style="FONT-FAMILY: courier new,monospace">
<div style="MARGIN-LEFT: 40px; FONT-FAMILY: courier new,monospace">&lt;code&gt;<br></div>
<div style="MARGIN-LEFT: 40px; FONT-FAMILY: courier new,monospace">
<div style="MARGIN-LEFT: 40px">open my $cmd_ls q[ls -lhR /pnfs/ |]</div></div></div></div></div></blockquote></div>
<div><br><br>essa sintaxe eu não conhecia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q[ls -lhR /pnfs/ |] &nbsp; &nbsp; &nbsp; &nbsp; seria &quot;o mesmo&quot; que `ls -lhR /pnfs/`, olhando um pouco do link <br></div></div></div></blockquote></div>
<div><br><span style="FONT-FAMILY: courier new,monospace">Não exatamente, o mesmo que `comando` é o qx[].</span><br>&nbsp;</div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">
<div class="gmail_quote">
<div><br><a href="http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators" target="_blank">http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators</a><br><br>deu pra entender o q[ ] , mas e o pipe??</div>
</div></div></blockquote></div>
<div><br><span style="FONT-FAMILY: courier new,monospace">Cara isto é uma captura de pipe, neste caso só STDOUT (<a href="http://perldoc.perl.org/perlipc.html#Using-open%28%29-for-IPC" target="_blank">http://perldoc.perl.org/perlipc.html#Using-open()-for-IPC</a>). Outras fontes é o perldoc IPC::Open2 e perldoc IPC::Open3</span><br>
&nbsp;</div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">
<div class="gmail_quote">
<div><br><br>outra, porque referenciar a variável que guardou o arquivo como &lt;$cmd_ls&gt; ? para ser tratado como um array ou algo assim?<br><br>valeu!</div></div></div></blockquote></div>
<div><br><span style="FONT-FAMILY: courier new,monospace">... cara dê uma olhada com carinho no &#39;perldoc -f open&#39;, mas vou explicar com menos detalhe uma coisa.<br><br>o &#39;open&#39; recebe um FILEHANDLE, e você deve fazer algo assim :<br>
</span>
<div style="MARGIN-LEFT: 40px"><span style="FONT-FAMILY: courier new,monospace">open FH, &#39;&lt;&#39;, &#39;/file&#39;;<br></span></div><span style="FONT-FAMILY: courier new,monospace">este é o exemplo padrão e que tudo mundo utiliza, só que o FILEHANDLE é uma &#39;variável&#39; glogal e pode trazer confusões se você tiver um script que abra vários arquivos com o mesmo filehandle. Para resolver este problema em potencial você pode declarar uma variável, tipo:<br>
</span>
<div style="MARGIN-LEFT: 40px"><span style="FONT-FAMILY: courier new,monospace">open my $fh, &#39;&lt;&#39;, &#39;/file&#39;;<br></span></div><span style="FONT-FAMILY: courier new,monospace">com isto você cria uma variável no escopo local... e que ninguém nos ouça, mas com isto vc nem precisa efetuar o close ($fh), pois quando você sair do escopo a variável &#39;$fh&#39; vai para o espaço !!!<br>
<br>Então, se $fh é uma variável contendo um FILEHANDLE, eu só consigo ler o conteúdo através do operador diamente &#39;&lt;&gt;&#39;, correto ?! Então não estou lendo um array, estou lendo o conteúdo do arquivo linha a linha, que neste caso é o STDOUT do pipe do comando !<br>
</span></div>
<div>
<div></div>
<div>
<div><span style="FONT-FAMILY: courier new,monospace"></span>
<div style="MARGIN-LEFT: 40px"><span style="FONT-FAMILY: courier new,monospace"></span></div></div>
<div><span style="FONT-FAMILY: courier new,monospace"></span>
<div style="MARGIN-LEFT: 40px"><span style="FONT-FAMILY: courier new,monospace"></span></div>&nbsp;</div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">
<div class="gmail_quote">
<div><br></div>
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr">
<div class="gmail_quote">
<div>
<div style="MARGIN-LEFT: 40px; FONT-FAMILY: courier new,monospace">
<div style="MARGIN-LEFT: 40px"><br>while (my $linha = &lt;$cmd_ls&gt; ) {<br>&nbsp; ...<br>}<br></div>&lt;/code&gt;<br></div><br></div>
<div>
<div>&nbsp;</div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div dir="ltr"><br>foreach my $i(@list){<br>#acha os diretórios que conterão os arquivos, e filtra seu nome para associar aos<br>#arquivos<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($i =~ /\:/)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chomp $i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %directories{$i}=<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br></div></blockquote></div>
<div><br><br><span style="FONT-FAMILY: courier new,monospace">Bom aqui tem uma problema grave e que vai gerar uma confusão boa, pelo seguinte:<br>1o. Você precisa criar dois fluxo de tratamento, um quando é o nome do diretório e outro quando é o nome do arquivo. E isto não é tão trivial fazer isto de maneira robusta.<br>
2o. a tua regex vai quebrar fácil se alguém criar um arquivo com nome &#39;:&#39;.<br><br>Então cara eu sugiro utilizar o File::Find !<br><br></span><br>&nbsp;</div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div>
<div dir="ltr"><br><br>e cada por exemplo %directories{/pnfs/home/users/samir}&nbsp; referenciaria um array dos arquivos que ele contém<br><br>qualquer sugestão de como fazer o nome do array variar a cada iteração é bem-vinda, ou talvez uma maneira mais inteligente de resolver o problema, sempre tem, mas às vezes não enxergo<br>
</div><br></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>&quot;o animal satisfeito dorme&quot;. - Guimarães Rosa<br></div><br>_______________________________________________<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></div><br></div><br>_______________________________________________<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></div></div>
<div>
<div></div>
<div><br><br clear="all"><br>-- <br>&quot;o animal satisfeito dorme&quot;. - Guimarães Rosa<br></div></div></div><br>_______________________________________________<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></div></div></div><br>_______________________________________________<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></div></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" 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></div></div>
<div>
<div></div>
<div><br><br clear="all"><br>-- <br>&quot;o animal satisfeito dorme&quot;. - Guimarães Rosa<br></div></div></div><br>_______________________________________________<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></div></div>
<div>
<div></div>
<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></div></div><br>_______________________________________________<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></div></div></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>
&quot;o animal satisfeito dorme&quot;. - Guimarães Rosa<br></div>