1

メインスクリプトから関数を呼び出すモジュールを使用しています。

関数を実行するには、次のコードを使用します。

&{$function}();

$function は単に呼び出された関数の名前です。

問題は、関数が同じモジュール内になければならないことです。

メイン スクリプトから関数を呼び出したいと思います。

これどうやってするの ?

4

2 に答える 2

3
sub call_function {
  my $name = shift;
  my $caller = caller;

  no strict 'refs';
  my $output = &{ $caller . "::" . $name }();
}

完全修飾名でサブを呼び出す必要があります。サブがパッケージに由来しない場合は、正しいパッケージ名をプレフィックスとして付ける必要があります。これcallerにはビルトインが便利です: サブルーチンが呼び出されたパッケージの名前を返します。

于 2013-06-26T08:35:18.697 に答える
3

あなたのメインプログラムであなたが持っていると仮定しましょう:

use Some::Module;

sub whatever { ... }

Some::Module::function(1,2,3);

そして、functionあなたはwhatever()サブを呼び出したいです。

関数を変更して、関数への参照となるもう 1 つの引数を取ることができwhateverます。その後:

メインプログラムで:

Some::Module::function(1,2,3,\&whatever);

そして Some::Module で:

sub function {
    my ($x, $y, $z, $more_work) = @_;
    ...
    $more_work->();
}
于 2013-06-26T08:36:17.370 に答える