【发布时间】:2025-12-02 05:20:10
【问题描述】:
以下原型演示了如何将“boss”脚本调用的“worker”脚本的STDOUT 捕获为FILEHANDLE,并将FILEHANDLE 的内容转换为可以操作的数组在“老板”脚本中。老板脚本junk.pl:
#!/usr/bin/perl
use strict; use warnings;
my $boppin;
my $worker = "junk2.pl";
open(FILEHANDLE, "$worker |");
my @scriptSTDOUT=<FILEHANDLE>;
close FILEHANDLE;
my $count=0;
foreach my $item ( @scriptSTDOUT ) {
$count++;
chomp $item;
print "$count\t$item\n";
}
if ( @scriptSTDOUT ) {
$boppin = pop @scriptSTDOUT; print "boppin=$boppin\n";
} else {
print STDERR "nothing returned by $worker\n";
}
my @array = ( '. . . \x09 wow\x21' , 5 );
system $worker, @array;
还有“工人”junk2.pl:
#!/usr/bin/perl
use strict; use warnings; use 5.18.2;
print "$0";
如果$worker 不需要其元素包含空格的数组作为参数,则使用open 和定义FILEHANDLE 是可以的。但是如果需要这样一个复杂的参数,就必须以列表的形式调用“worker”脚本,就像在“boss”脚本的底部一样。 “列表形式”见Calling a shell command with multiple arguments。
在这种情况下,如何将STDOUT 捕获为FILEHANDLE?如何修改“boss”脚本的底线来完成这个?
【问题讨论】:
标签: list perl filehandle