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

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

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

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


person Ram    schedule 07.04.2010    source источник


Ответы (3)


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

#! /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>
person Greg Bacon    schedule 07.04.2010

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

$ foo | bar

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

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

person friedo    schedule 07.04.2010

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

person Klaus Byskov Pedersen    schedule 07.04.2010