メインスクリプトから関数を呼び出すモジュールを使用しています。
関数を実行するには、次のコードを使用します。
&{$function}();
$function は単に呼び出された関数の名前です。
問題は、関数が同じモジュール内になければならないことです。
メイン スクリプトから関数を呼び出したいと思います。
これどうやってするの ?
メインスクリプトから関数を呼び出すモジュールを使用しています。
関数を実行するには、次のコードを使用します。
&{$function}();
$function は単に呼び出された関数の名前です。
問題は、関数が同じモジュール内になければならないことです。
メイン スクリプトから関数を呼び出したいと思います。
これどうやってするの ?
sub call_function {
my $name = shift;
my $caller = caller;
no strict 'refs';
my $output = &{ $caller . "::" . $name }();
}
完全修飾名でサブを呼び出す必要があります。サブがパッケージに由来しない場合は、正しいパッケージ名をプレフィックスとして付ける必要があります。これcaller
にはビルトインが便利です: サブルーチンが呼び出されたパッケージの名前を返します。
あなたのメインプログラムであなたが持っていると仮定しましょう:
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->();
}