如何通过命令行或脚本将输出从perl脚本输出到另一个脚本

时间:2012-05-27 06:57:30

标签: perl pipe

我在Windows机器上(在环境路径上使用perl解释器)命令:

 perl script1.pl | perl script2.pl 

并且脚本一的内容只是:

  print "AAA";

并且脚本2的内容只是:

  $r = shift;
  print $r;

命令没有正确管道。你怎么做到这一点?也, 如果您使用Filehandle执行此操作,您将如何同时从另一个脚本运行perl脚本。以下不起作用:

    open F, '| perl script2.pl AAA';

2 个答案:

答案 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