4

Windowsマシン(環境パスにperlインタープリターがある)に次のコマンドがあります:

 perl script1.pl | perl script2.pl 

スクリプト 1 の内容は次のとおりです。

  print "AAA";

スクリプト 2 の内容は次のとおりです。

  $r = shift;
  print $r;

そして、コマンドは正しくパイプされません。これどうやってやるの?また、ファイルハンドルを使用して実行する場合、別のスクリプトから同時に perl スクリプトを実行するにはどうすればよいでしょうか。以下は機能しません。

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

2 に答える 2

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では優れたアイデアです。上記のコードは、両方のスクリプトが現在のディレクトリにあることを前提としています。出力:

script2.pl:foo
script2.pl:バー
script2.pl:baz
script2.pl:quux
于 2012-05-27T09:31:08.903 に答える
1

STDINから読み取る必要があります。shiftはコマンドライン引数を操作します。

次のスニペットで説明します。

cat script1.pl
print "AAA";

cat script2.pl
print <STDIN>;
于 2012-05-27T08:24:23.273 に答える