[SP-pm] Dúvida com o módulo File::Find

Thiago Glauco Sanchez thiagoglauco at ticursos.net
Tue Jul 13 10:10:16 PDT 2010


Flávio, lembra o post que você ontém sobre a variável $_?
Olha as respostas e  olha o que você fez aqui:

foreach ($_) {  o argumento de foreach é um array, então cada valor do 
array vai para a variável $_.

foreach $_ (@um_array){} e não foreach($_)...

Em 13/07/2010 14:02, Giuliani Sanches escreveu:
> Flávio,
>
> troca o seu $diretorios por:
>
> @diretorios = ('meu_diretorio/')
>
> Dentro da sua sub busca, você não precisa fazer um foreach pois a
> função find automaticamente percorre o array passado e
> disponibilizando o path dentro do callback que você passou, na
> variável $_.
>
> []'s
>
> 2010/7/13 "Flávio R. Lopes"<flavio.lopes em links.inf.br>:
>    
>> Olá Alexei!
>> Ok, vou dar uma lida novamente!
>>
>> De qualquer forma, abaixo segue o erro:
>>
>> #############
>> Use of uninitialized value $cmd in pattern match (m//) at
>> /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 736,<GEN0>  line 1.
>> Use of uninitialized value $cmd in concatenation (.) or string at
>> /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 736,<GEN0>  line 1.
>> protocol error: expected ENC_TO got :
>>   at /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 154
>>      GnuPG::abort_gnupg('GnuPG=HASH(0x176b220)', 'protocol error: expected
>> ENC_TO got : \x{a}') called at
>> /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 736
>>      GnuPG::decrypt_postwrite('GnuPG=HASH(0x176b220)', 'ciphertext', ' . ',
>> 'output', ' . ', 'recipient', '0D59E2D1', 'passphrase',
>> '123-minha-senha-321', ...) called at
>> /usr/local/lib/perl5/site_perl/5.12.1/GnuPG.pm line 725
>>      GnuPG::decrypt('GnuPG=HASH(0x176b220)', 'ciphertext', ' . ', 'output', '
>> . ', 'recipient', '0D59E2D1', 'passphrase', '123-minha-senha-321', ...)
>> called at /home/flavio/workspace/Ferramentas/Desemcripta.pl line 23
>>      main::busca() called at /usr/local/lib/perl5/5.12.1/File/Find.pm line
>> 854
>>      File::Find::_find_dir('HASH(0x1781b90)', '/home/flavio/teste_cripto', 5)
>> called at /usr/local/lib/perl5/5.12.1/File/Find.pm line 722
>>      File::Find::_find_opt('HASH(0x1781b90)', '/home/flavio/teste_cripto')
>> called at /usr/local/lib/perl5/5.12.1/File/Find.pm line 1297
>> #############
>>
>> Abraço!
>>
>> Em 13-07-2010 13:44, Alexei Znamensky escreveu:
>>
>> Se você não mostra a mensagem de erro, fica bem difícil de alguém te ajudar.
>> De cara, apesar de não causar (à primeira vista) um problema na execução,
>> você ter um laço do tipo foreach($_) { .. } dentro das suas subs é algo
>> desnecessário e indicativo de que você não entende direito o que está
>> fazendo.
>> Sugiro ler novamente, com mais cudado desta vez, a documentação do
>> File::Find.
>>
>> []s,
>> Russian
>> 2010/7/13 "Flávio R. Lopes"<flavio.lopes em links.inf.br>
>>      
>>> Pessoal, ainda não consegui fazer funcionar o programa para
>>> descriptografar os arquivos!
>>> Alguém poderia me dar uma ajudar?
>>>
>>> Abraço,
>>> Flávio
>>>
>>> Em 12-07-2010 20:40, "Flávio R. Lopes" escreveu:
>>>        
>>>> Boa noite pessoal!
>>>>
>>>> Fiz um programa (Encripta.pl) para encryptar recursivamente os arquivos
>>>> que ficam debaixo de uma árvore de um determinado diretório.
>>>> E o outro programa para desencriptar (Desencripta.pl) os arquivos que
>>>> foram encriptados pelo programa anterior.
>>>>
>>>> O programa para encriptar está funcionando:
>>>>
>>>> Encripta.pl:
>>>>
>>>> #!/usr/bin/perl
>>>>
>>>> use strict;
>>>> use warnings;
>>>> use 5.012;
>>>>
>>>> use File::Find;
>>>> use GnuPG qw( :algo );
>>>>
>>>> my $gpg = new GnuPG();
>>>>
>>>> my $diretorios = "/home/flavio/teste_cripto"; ## Aqui ainda pretendo
>>>> criar um array para "armazenar" uma lista com mais diretórios
>>>>
>>>>
>>>>
>>>> my $secret = "123-minha-senha-321"; ## Senha utilizada para criação da
>>>> Chave
>>>> my $arquivos;
>>>>
>>>> find( \&busca, $diretorios );
>>>>
>>>> sub busca {
>>>>
>>>> foreach ($_) {
>>>>
>>>> $gpg->encrypt(
>>>> plaintext =>  "$_",
>>>> output =>  "$_.gpg",
>>>> armor =>  1,
>>>> sign =>  1,
>>>> recipient =>  "0D59E2D1", ## Minha Chave
>>>> passphrase =>  $secret
>>>> );
>>>>
>>>> # say $_;
>>>>
>>>> }
>>>>
>>>> # unlink $_ if /\.gpg$/;
>>>>
>>>> # print "$arquivos\n" if -f $arquivos;
>>>>
>>>> }
>>>>
>>>>
>>>> O meu problema é para desencriptar os dados. Eu rodo o programa abaixo
>>>> (Desencripta.pl) e dá um erro que não estou conseguindo entender:
>>>>
>>>> Desencripta.pl:
>>>>
>>>> #!/usr/bin/perl
>>>>
>>>> use strict;
>>>> use warnings;
>>>> use 5.012;
>>>>
>>>> use File::Find;
>>>> use GnuPG qw( :algo );
>>>>
>>>> my $gpg = new GnuPG();
>>>>
>>>> my $diretorios = "/home/flavio/teste_cripto";
>>>>
>>>> my $secret = "123-minha-senha-321";
>>>> my $arquivos;
>>>>
>>>> find( \&busca, $diretorios );
>>>>
>>>> sub busca {
>>>>
>>>> foreach ($_) {
>>>> $gpg->decrypt(
>>>> ciphertext =>  " $_ ",
>>>> output =>  " $_ ",
>>>> recipient =>  "0D59E2D1",
>>>> passphrase =>  $secret
>>>> );
>>>>
>>>> ## say $_; -->  Aqui eu dei um "say" nesta variável para verificar se
>>>> realmente estava trazendo os nomes dos arquivos e o
>>>> gozado é que é que ela lista todos os arquivos que foram
>>>> encriptados, mas mesmo assim dá um erro quando rodo o
>>>> programa
>>>>
>>>>
>>>>
>>>>   }
>>>> }
>>>>
>>>> O que está errado no meu programa?
>>>>
>>>> Abraço,
>>>> Flávio
>>>> _______________________________________________
>>>> SaoPaulo-pm mailing list
>>>> SaoPaulo-pm em pm.org
>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>>
>>>>          
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>        
>>
>>
>> --
>> Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com]
>> [www.flickr.com/photos/alexeiz]
>> "Though we live in trying times, we're the ones who have to try"
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>>      
>
>
>    


-- 
What is the sound of Perl? Is it not the sound of a wall that people have
stopped banging their heads against?
—Larry Wall

Thiago Glauco Sanchez
Intrutor Perl e Redes
www.ticursos.net



More information about the SaoPaulo-pm mailing list