RICHARD FERNANDEZ wrote:
> Hi Folks,

Hello,

> I have a job that takes in an encrypted file and decrypts it using
> Crypt::GPG.
> 
> <code>
>  for my $encrypted_file (@files) {
>          
>          open(CIPHERTXT, $encrypted_file) or croak "Can't open
> encrypted_file: $encrypted_file\n";

You should include the $! (or perhaps the $^E) variable in your error message
so you will know why it croaked.

You probably need to binmode() the filehandle.

perldoc -f binmode

>          my @ciphertxt = <CIPHERTXT>;
> 
>          my($cleartxt, $signature) = $gpg -> decrypt([EMAIL PROTECTED]); 
> 
>          # File names must have a ".extension" on them if they're
> encrypted
>          # we will strip off the last "dot" and everything after it to
> name the 
>          # clear text file
>          my $filename = (split /\.\w+$/, $encrypted_file)[0]; 

You probably want to use substitution in instead of split.

( my $filename = $encrypted_file ) =~ s/\.\w+$//;

>          open(CLEARTXT, ">", "$filename") or croak "Can't write to

perldoc -q quoting

> $filename: $!\n";
>          print CLEARTXT $cleartxt or croak "Can't print cleartext:
> $!\n";
>          close CLEARTXT or croak "Can't close <CLEARTXT>?\n";
> 
>          push @processed_files, $filename or croak "Can't create list of

perldoc -f push
       push ARRAY,LIST
               Treats ARRAY as a stack, and pushes the values of LIST onto the
               end of ARRAY.  The length of ARRAY increases by the length of
               LIST.  Has the same effect as

                   for $value (LIST) {
                       $ARRAY[++$#ARRAY] = $value;
                   }

               but is more efficient.  Returns the new number of elements in
               the array.

The only way that your expression will croak is if @processed_files is empty
and you push an empty list on to it.

$ perl -le' push @x, $y or die "Push error" '
$ perl -le' push @x, () or die "Push error" '
Push error at -e line 1.

In other words, your expreesion will *never* croak.

> decrypted files!\n";
> }
> </code>
> 
> Mostly, this works as I expect, but once in a blue moon we get a
> ciphertext that produces a 0 byte cleartext file when run
> through the above code. When I decrypt the file manually (gpg --decrypt
> <filename> > clear.txt ) I get a good (readable) cleartext file.

You probably need to use binmode on your filehandles.



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to