我在Windows机器上(在环境路径上使用perl解释器)命令:
perl script1.pl | perl script2.pl
并且脚本一的内容只是:
print "AAA";
并且脚本2的内容只是:
$r = shift;
print $r;
命令没有正确管道。你怎么做到这一点?也, 如果您使用Filehandle执行此操作,您将如何同时从另一个脚本运行perl脚本。以下不起作用:
open F, '| perl script2.pl AAA';
答案 0 :(得分:1)
您应该阅读 STDIN , shift 操作命令行参数。
以下代码段解释了它。
cat script1.pl
print "AAA";
cat script2.pl
print <STDIN>;
答案 1 :(得分:1)
请记住,主程序中的shift
会从保存当前调用的命令行参数的特殊数组@ARGV
中删除元素。
将 script2 写为过滤器
#! perl
while (<>) {
print "$0: ", $_;
}
甚至
#! perl -p
s/^/$0: /;
要从 script1 设置管道,请使用
#! perl
use strict;
use warnings;
open my $fh, "|-", "perl", "script2.pl"
or die "$0: could not start script2: $!";
print $fh $_, "\n" for qw/ foo bar baz quux /;
close $fh or die $! ? "$0: close: $!"
: "$0: script2 exited $?";
多参数open
在Windows上绕过shell的参数解析 - 一个优秀的想法。上面的代码假设两个脚本都在当前目录中。输出:
script2.pl: foo script2.pl: bar script2.pl: baz script2.pl: quux