[Rio-pm] Hashes que referenciam (arrays variáveis?)

Samir Cury rimasy em gmail.com
Sexta Setembro 12 11:52:21 PDT 2008


Beleza Solli, só uma coisa

2008/9/12 Solli Honorio <shonorio em gmail.com>

> 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 !!!
>
> Agora sobre o código :
>
>
> 2008/9/12 Samir Cury <rimasy em gmail.com>
>
>> 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.
>>
>> Beleza, o du -ha me ajudaria nisso, mas ele não funciona no fs que estou
>> usando, apenas ls -laR
>>
>> Então o que pensei:
>>
>> #!/usr/bin/perl
>> use diagnostics;
>>
>> @list=`ls -lhR /pnfs/`;
>>
>
> evite isto, pelos motivos :
> 1o. é difícil de ler, prefira qx/ls.../;
> 2o. não coloque o retorno todo numa array, você está consumindo muito
> recurso de memoria, prefira:
> <code>
> open my $cmd_ls q[ls -lhR /pnfs/ |]
>


essa sintaxe eu não conhecia       q[ls -lhR /pnfs/ |]         seria "o
mesmo" que `ls -lhR /pnfs/`, olhando um pouco do link

http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators

deu pra entender o q[ ] , mas e o pipe??

outra, porque referenciar a variável que guardou o arquivo como <$cmd_ls> ?
para ser tratado como um array ou algo assim?

valeu!

>
> while (my $linha = <$cmd_ls> ) {
>   ...
> }
> </code>
>
>
>
>>
>> foreach my $i(@list){
>> #acha os diretórios que conterão os arquivos, e filtra seu nome para
>> associar aos
>> #arquivos
>>         if ($i =~ /\:/)
>>                 {
>>                 chomp $i;
>>                 %directories{$i}=
>>                 }
>>         }
>>
>
>
> Bom aqui tem uma problema grave e que vai gerar uma confusão boa, pelo
> seguinte:
> 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.
> 2o. a tua regex vai quebrar fácil se alguém criar um arquivo com nome ':'.
>
> Então cara eu sugiro utilizar o File::Find !
>
>
>
>
>>
>>
>> e cada por exemplo %directories{/pnfs/home/users/samir}  referenciaria um
>> array dos arquivos que ele contém
>>
>> 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
>>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
>
> --
> "o animal satisfeito dorme". - Guimarães Rosa
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20080912/2e16ab16/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm