我必须修补内部软件产品中的一些核心组件。由于它对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(webserver)条件下运行。 STDIN处理Web请求的POST数据。
答案 0 :(得分:1)
open(STDIN, '<', \$stdin_raw)
顺便说一下,
my $stdin_raw = join '', <STDIN>;
通常写成
my $stdin_raw; { local $/; $stdin_raw = <STDIN>; }
也可能更有效率。
答案 1 :(得分:0)
根本无法读取,重新填充,读取STDIN。