5

メイン スクリプトからロードされる Perl モジュールを作成します。このモジュールは、メイン スクリプト内で定義されているサブルーチンを使用します (私はメンテナではありません)。

メイン スクリプトのサブルーチンの 1 つで拡張が必要ですが、メイン スクリプトにパッチを適用したくありません。代わりに、モジュール内の関数をオーバーライドして、元のサブルーチンへの参照を保存したいと考えています。オーバーライドが呼び出された場合は、元のサブルーチンを呼び出して、必要に応じて追加の処理を行います。

シンポリティック モジュール コード

my $referenceToOriginalSub;

sub inititialize()
{
    $referenceToOriginalSub = \&originalSub;
    undef &originalSub;
    *originalSub = \&overrideSub;
}

sub overrideSub()
{
    #call original within mainscript
    &$referenceToOriginalSub(@_);
    # do some additional processing if required
}

無限再帰になってしまうため、これは機能しません。originalSubへの参照は、その置換も指していることは明らかです。

では、無限再帰を回避する方法を教えてください。

4

1 に答える 1