我想要达到的目标:
###############CODE########
old_procedure(arg1, arg2);
#############CODE_END######
我有一个巨大的代码,其中有一个旧程序。我希望对 old_procedure 的调用转到对具有相同参数的新过程 (new_procedure(arg1, arg2)) 的调用。现在我知道了,这个问题似乎很愚蠢,但诀窍是我不允许更改代码或 bad_function。所以我唯一能做的就是在外部创建一个程序来读取代码流或其他东西,然后每当它找到 bad_function 时,它就会用 new_function 替换它。它们具有 void 类型,因此不必担心返回值。我正在使用 perl。如果有人知道如何至少从这个方向开始......请发表评论或回答。如果新代码可以用 perl 或 C 来完成,那就太好了,但其他已知的语言也很好。C++,Java。
编辑:代码是用 shell 脚本和 perl 编写的。我无法编辑代码,也没有 old_function 的位置,我的意思是我可以找到它……但它真的很难。所以我可以使用指出的包的东西,但是如果有办法解决它......这样我就可以用那个函数解析线程并替换函数调用。请不要删除标签,因为我还需要 java、C++ 专家的建议。
编辑:@mirod 所以我试了一下,你的回答做了一个新的子程序,现在没有办法访问旧的子程序。我创建了一个变量,它检查值以决定走哪条路(old_sub 或 new_sub)...有没有办法在新代码中添加变量...如果未设置,它将控制发送回 old_function ... 喜欢:
use BadPackage; # sub is defined there
BEGIN
{ package BapPackage;
no warnings; # to avoid the "Subroutine bad_sub redefined" message
# check for the variable and send to old_sub if the var is not set
sub bad_sub
{ # good code
}
}
# Thanks @mirod