4

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

 perl script1.pl | perl script2.pl 

脚本一的内容只是:

  print "AAA";

脚本2的内容就是:

  $r = shift;
  print $r;

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

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

2 回答 2

1

您应该从STDIN阅读,shift操纵命令行参数。

下面的代码片段解释了它。

cat script1.pl
print "AAA";

cat script2.pl
print <STDIN>;
于 2012-05-27T08:24:23.273 回答
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绕过了 shell 的参数解析——在 Windows 上是一个绝妙的主意上面的代码假定两个脚本都在当前目录中。输出:

script2.pl: 富
script2.pl:酒吧
script2.pl: baz
script2.pl: quux
于 2012-05-27T09:31:08.903 回答