メンテナンスを実行するために使用される Perl スクリプトを使用しています。より多くのタスクを処理できるように変更する必要がありました。問題は、スクリプトがコンパイルされ、ソースがずっと前に失われたことです。
ファイルを再作成するために B::Deparse を使用しようとしましたが、Deparse は完全ではなく、出力が壊れています (非常に大きな ~5000 行の逆解析コード)。
デパースされたコードを読んだ後、1 つの関数を変更する必要があることがわかりました。コンパイルされたスクリプトはプレーンテキストのスクリプト モジュールをロードするので、モジュールを変更して関数をオーバーライドし、必要なタスクを実行します。問題は、メイン スクリプトの "my" 変数にアクセスできないことです。
次に例を示します。
# main.pl
my $a = 1;
sub call_me {
print "unmodified";
}
use MOD;
call_me;
MOD.pm
package MOD;
main::{'call_me'} = sub {
print "\$main::a = $main::a\n";
}
結果は次のとおりです: " $main::a =
" 実際の値を取得する代わりに。
前もって感謝します。