我必须修补内部软件产品中的一些核心组件。由于它对 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(网络服务器)条件下运行。STDIN 处理 Web 请求的 POST 数据。