tmp.pl と tmp2.pl の 2 つのファイルがあります。require コマンドで tmp2.pl を呼び出したいが、パラメーターも送信したい。これを行うより良い方法はありますか?
tmp.pl
require "tmp2.pl" "passed parameter";
tmp2.pl
print @_;
tmp.pl と tmp2.pl の 2 つのファイルがあります。require コマンドで tmp2.pl を呼び出したいが、パラメーターも送信したい。これを行うより良い方法はありますか?
tmp.pl
require "tmp2.pl" "passed parameter";
tmp2.pl
print @_;
私の知る限りrequire
、パラメータの送信には使用できません。しかし、それは良いことだと思います。あなたがそうしたいと思う理由が思いつかないからです。あなたのデザインは間違っているように見えます。
tmp2.pl
次のいずれかである必要があります。
system
またはで実行する必要がある独立した perl プログラムqx()
しかし、それは私の考えです....
あなたがやろうとしていることを達成するためのより良い方法がおそらくありますが、次のような方法で現在のサブ目標を達成できます
{
local @_ = ("passed parameter");
require "tmp2.pl";
}
このイディオムは、perl スクリプト内から perl スクリプトを実行したい場合に使用すると考えることができます。つまり、私は言うことができます
{
local @ARGV = ("foo","bar");
require "my_script.pl";
}
それ以外の
system("perl","my_script.pl","foo","bar");
(これら 2 つの呼び出しには微妙な違いとそれほど微妙ではない違いがたくさんあるため、必要なこれらの呼び出しの「機能」に大きく依存します)
はい、これでうまくいくと思います。「require」を使用してスクリプトを含めます。その後、サブ関数を呼び出してパラメーターを渡すことができます。変更されたスクリプトは
require "tmp2.pl" ;
subfunc(parameter);
print @_;
他のプログラムを実行し、その出力をキャプチャしたいと仮定すると、私は 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";