altering the %ENV hash won't work unless you spawn a child process.
you may not be printing everything to the WRITER filehandle. i had a similar problem with Open3 and commands. use join to get a string, and print THAT to the WRITER handle. your pgp program is probably waiting for input.
and i may be wrong on this point: you need to create the filehandles with my $READER = FileHandle->new() to properly use the methods in FileHandle. so, you may not be autoflushing your handles and running into buffer issues.