-1

私は2つのperlスクリプトa.plb.plを持っています

a.pl内で、 b.plを次のように呼び出します。system("/usr/bin/perl ./b.pl");

b.pl内で何かを実行してから、いくつかの値を$aaandに代入します。$bb

b.plを呼び出した後のa.plでは、a.plはb.plの値とb.plからの値を必要とします。$aa$bb

私は調査を行い、「エクスポーター」またはセットを使用し、b.plにいると言っている人々$aa$bb見つけ$ENVまし

しかし、いくつかの試行の後、私はそれを達成できませんでした。

誰でも助けることができますか?ありがとう。

4

3 に答える 3

1

経由systemで呼び出すと、サブプロセスが呼び出されます。パイプを介していないもの (stdout など) を取得することはできません。

おそらくあなたが望むのはdo './b.pl; 代わりは。さらに良いことに、b.pl を b.pm に入れ、そのパッケージを設定すると、require b;そのパッケージを通じてそのグローバルにアクセスできます。

于 2012-06-21T19:19:38.487 に答える
1

なんらかの理由でこれを 2 つのアプリケーションとして実行する必要がある場合douseまたはrequireアプリケーション内の別の perl スクリプトではなく、 b.plから STDOUT に結果を出力できます。

print join('|', $aa, $bb);

そしてa.plでそれを読んで分割します

my ($aa, $bb) = split(/\|/, `/usr/bin/perl ./b.pl`);

$aaまたは$bb文字が含まれている可能性がある場合は|、別のセパレータを選択してください。

于 2012-06-21T19:26:18.287 に答える
0

b.pl がローカルで宣言された変数なしで記述されている場合 (警告を使用せず、strict を使用し、my $aa を使用しない)、ファイルを変数に読み込んで評価することができます。そうしないと、b.pl を変更しない限り、これは不可能です。可能ないくつかのこと:

  • ENVを使用します(前に示唆したように)
  • b.pl の終了前に STDOUT に $aa と $bb を出力し、a.pl でそれらを読み取ります
  • よく知られているIPCメソッド (パイプ、ソケット、一時ファイル) を使用します。
  • b.pl のロジックを別のモジュールに移動し、そのモジュールを b.pl と a.pl からインクルードします。
于 2012-06-21T19:27:33.190 に答える