0

tmp.pl と tmp2.pl の 2 つのファイルがあります。require コマンドで tmp2.pl を呼び出したいが、パラメーターも送信したい。これを行うより良い方法はありますか?

tmp.pl

require "tmp2.pl" "passed parameter";

tmp2.pl

print @_;
4

4 に答える 4

4

私の知る限りrequire、パラメータの送信には使用できません。しかし、それは良いことだと思います。あなたがそうしたいと思う理由が思いつかないからです。あなたのデザインは間違っているように見えます。

tmp2.pl次のいずれかである必要があります。

  • systemまたはで実行する必要がある独立した perl プログラムqx()
  • オプションのエクスポートされたタグなどを含むモジュール。
  • クラスを定義するパッケージ

しかし、それは私の考えです....

于 2012-11-16T16:31:12.210 に答える
2

あなたがやろうとしていることを達成するためのより良い方法がおそらくありますが、次のような方法で現在のサブ目標を達成できます

{
    local @_ = ("passed parameter");
    require "tmp2.pl";
}

このイディオムは、perl スクリプト内から perl スクリプトを実行したい場合に使用すると考えることができます。つまり、私は言うことができます

{
    local @ARGV = ("foo","bar");
    require "my_script.pl";
}

それ以外の

system("perl","my_script.pl","foo","bar");

(これら 2 つの呼び出しには微妙な違いとそれほど微妙ではない違いがたくさんあるため、必要なこれらの呼び出しの「機能」に大きく依存します)

于 2012-11-16T21:54:10.287 に答える
0

はい、これでうまくいくと思います。「require」を使用してスクリプトを含めます。その後、サブ関数を呼び出してパラメーターを渡すことができます。変更されたスクリプトは

require "tmp2.pl" ;
subfunc(parameter);
print @_;

于 2012-11-17T06:10:41.473 に答える
0

他のプログラムを実行し、その出力をキャプチャしたいと仮定すると、私は IPC::Run モジュールを使用するのが好きです。

#!/usr/bin/perl

use strict;
use warnings;
use IPC::Run qw( run );

run( [ './tmp2.pl', @ARGV ], \'', \my $out, \my $err );

print "out: $out\n";
print "err: $err\n";
于 2012-11-18T04:53:48.220 に答える