Как получить дескриптор файла для вывода программы Perl? - PullRequest
1 голос
/ 07 апреля 2010

У меня есть зашифрованный файл X1, у меня есть программа Perl P1, которая расшифровывает X1. Я анализирую расшифрованный файл, используя программу Perl p2.

X1--P1(decrypter) --> X2(plain text file) --p2(parser) --> parse output

Мой анализатор основан на XML :: Parser . Он может работать с дескриптором файла для расшифрованного файла. Теперь я получаю X2, сохраняю его в файловой системе, читаю в P2 и анализирую. Есть ли способ, которым я могу напрямую получить дескриптор файла через выход P1 и использовать этот дескриптор файла в P2, чтобы проанализировать его напрямую, не требуя временного файла?

Ответы [ 3 ]

4 голосов
/ 07 апреля 2010

Скажем, вы используете очень слабое шифрование:

#! /usr/bin/perl

print <<EOXML;
<doc>
  <elem attr="Hello, world!" />
</doc>
EOXML

Использование open $fh, "-|", ... создаст канал, связанный со стандартным выводом дочернего процесса:

#! /usr/bin/perl

use warnings;
use strict;

open my $decrypted, "-|", "./decrypt"
  or die "$0: open: $!";

while (<$decrypted>) {
  print "got: $_";
}

Выход:

got: <doc>
got:   <elem attr="Hello, world!" />
got: </doc>
3 голосов
/ 07 апреля 2010

Я не уверен, что полностью понимаю, к чему вы клоните, но, похоже, вы просто хотите использовать трубы. Вы можете сделать это в оболочке, перенаправив STDOUT одной программы на STDIN

другой.
$ foo | bar

Или вы можете сделать это в Perl, открыв канал непосредственно другой программе.

См. Также IPC :: Open3 , если вам нужен контроль над STDERR.

1 голос
/ 07 апреля 2010

Почему бы вам просто не заставить свои программы читать из STDIN и записывать в STDOUT и передавать команды вместе в командной строке?

...