<div dir="ltr">2008/9/12 Samir Cury <span dir="ltr"><<a href="mailto:rimasy@gmail.com">rimasy@gmail.com</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<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> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div dir="ltr"><br><div class="gmail_quote">2008/9/12 Solli Honorio <span dir="ltr"><<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>></span><div class="Ih2E3d"><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div dir="ltr">Grande pequeno gafanhoto Samir, este teu código está estranho... mas vou pular estar parte e vamos para o trabalho verdadeiro.. utilize o 'File::Find', 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"><<a href="mailto:rimasy@gmail.com" target="_blank">rimasy@gmail.com</a>></span><div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<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;"><code><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 q[ls -lhR /pnfs/ |] seria "o mesmo" que `ls -lhR /pnfs/`, olhando um pouco do link <br></div></div></div></blockquote>
<div><br><span style="font-family: courier new,monospace;">Não exatamente, o mesmo que `comando` é o qx[].</span><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<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><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()-for-IPC">http://perldoc.perl.org/perlipc.html#Using-open()-for-IPC</a>). Outras fontes é o perldoc IPC::Open2 e perldoc IPC::Open3</span><br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr"><div class="gmail_quote"><div><br><br>outra, porque referenciar a variável que guardou o arquivo como <$cmd_ls> ? para ser tratado como um array ou algo assim?<br>
<br>valeu!</div></div></div></blockquote><div><br><span style="font-family: courier new,monospace;">... cara dê uma olhada com carinho no 'perldoc -f open', mas vou explicar com menos detalhe uma coisa.<br><br>o 'open' 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, '<', '/file';<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 'variável' 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, '<', '/file';<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 '$fh' 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 '<>', 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><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> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr"><div class="gmail_quote">
<div><br> </div><div class="Ih2E3d"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<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 = <$cmd_ls> ) {<br> ...<br>}<br></div></code><br></div><br></div><div><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<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>
if ($i =~ /\:/)<br> {<br> chomp $i;<br> %directories{$i}=<br> }<br> }<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 ':'.<br>
<br>Então cara eu sugiro utilizar o File::Find !<br><br></span><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>
<div dir="ltr"><br>
<br>e cada por exemplo %directories{/pnfs/home/users/samir} 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>"o animal satisfeito dorme". - 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">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>"o animal satisfeito dorme". - Guimarães Rosa<br>
</div>