1

暗号化されたファイル X1 があり、X1 を復号化する Perl プログラム P1 があります。Perl プログラム p2 を使用して、復号化されたファイルを解析しています。

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

私のパーサーはXML::Parserに基づいています。復号化されたファイルへのファイルハンドルを操作できます。現在、X2 を取得してファイル システムに格納し、P2 で読み取って解析しています。P1 の出力でファイルハンドルを直接取得し、そのファイルハンドルを P2 で使用して、一時ファイルを必要とせずに直接解析する方法はありますか?

4

3 に答える 3

4

非常に弱い暗号化を使用しているとします。

#! /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: $_";
}

出力:

取得: <doc>
得た: <elem attr="Hello, world!" />
得た: </doc>
于 2010-04-07T14:03:51.700 に答える
3

あなたが何を得ているのか完全に理解しているかどうかはわかりませんが、パイプを使いたいだけのようです。あるプログラムの STDOUT を別のプログラムの STDIN にリダイレクトすることで、シェルでそれを行うことができます。

$ foo | bar

または、別のプログラムへのパイプを直接開いて、 Perl 内で実行することもできます。

STDERR を制御する必要がある場合は、IPC::Open3も参照してください。

于 2010-04-07T14:01:42.617 に答える
1

プログラムを STDIN から読み込んで STDOUT に書き込んで、コマンドをコマンド ラインで一緒にパイプ処理してみませんか?

于 2010-04-07T14:02:10.323 に答える