メイン スクリプトからロードされる 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
への参照は、その置換も指していることは明らかです。
では、無限再帰を回避する方法を教えてください。