Geo*_*Geo 7 perl symbols redefinition
这就是我想要实现的目标:
sub first {
print "this is original first";
}
*original_first = \&first;
sub first {
print "this is first redefined";
}
original_first(); # i expect this to print "this is original first"
first() # i expect this to print "this is first redefined"
Run Code Online (Sandbox Code Playgroud)
我认为通过保存符号first,我可以稍后调用原始子程序(在名称下original_first)并且也能够调用first,并重新定义一个.但是,如果我打电话给original_first,我仍然得到"这是第一次重新定义".我需要做些什么来完成这项工作?
这应该按预期工作:
sub first {
print "this is original first";
}
*original_first = \&first;
*first = sub {
print "this is first redefined";
};
Run Code Online (Sandbox Code Playgroud)
在你的代码中,Perl解释了与此类似的两个子声明:
BEGIN {
*first = sub { ... }
}
Run Code Online (Sandbox Code Playgroud)
因此&first,在保存副本和调用例程之前,两个分配都会结束.修复是将第二个声明变为运行时赋值:
sub first {
print "this is original first";
}
*original_first = \&first;
*first = sub {print "this is first redefined"};
original_first(); # prints "this is original first"
first(); # prints "this is first redefined"
Run Code Online (Sandbox Code Playgroud)