社内ソフトウェア製品のコア コンポーネントのいくつかにライト パッチを適用する必要があります。STDIN の処理が非常に厄介なため、次のことを行う必要があります。
- STDIN を読み取り、RAW をバックアップする
- 解析する
- RAW を STDIN に書き戻す
- 下流のシステムに STDIN を処理させる
残念ながら、レガシー コードを変更することは許可されていないため、簡単なパッチを適用する必要があります。
私の最初の試してみてください:
BEGIN {
my $stdin_raw = join '', <STDIN>;
use IO::Handle;
my $stdin_io1 = IO::Handle->new();
$stdin_io1->printflush( $stdin_raw );
my $stdin_io2 = IO::Handle->new();
$stdin_io2->printflush( $stdin_raw );
STDIN->fdopen( $stdin_io1, 'r' );
require CGI;
warn CGI::param('PARAM1');
warn CGI::param('PARAM2');
STDIN->fdopen( $stdin_io2, 'r' );
}
最初の行で STDIN を読み取ることができますが、夜間の CGI も下流のシステムも、上記のように設定しようとした STDIN から入力を取得していません。
では、Perl で STDIN を読み取り、コンテンツを STDIN に書き戻す方法は?
アプリケーションは CGI (Web サーバー) の状態で実行されています。STDIN は Web リクエストの POST データを処理します。