gpt4 book ai didi

perl - 如何防止子程序在 Perl 中被覆盖?

转载 作者:行者123 更新时间:2023-12-04 23:26:08 27 4
gpt4 key购买 nike

我正在处理遗留代码,必须require定义子 foo 的 .pl 文件.我的问题是在我的 main:: 中命名空间已经有另一个子 foo ,稍后在我目前没有处理的程序的一部分中调用。

我需要的文件定义了 sub foo {}因为显然它不希望 foo 事情发生在它通常被调用的地方。就我而言,这很糟糕。

我试过玩弄 *foo球体:

*old_foo = *foo;
require 'foo_killer.pl';
*foo = *old_foo;

当然,这行不通,因为我只创建了一个别名(正如 brian d foy 在 Mastering Perl 的第 133 页指出的那样),因此 *old_foo将指向现在的“空”子程序。

有没有办法以某种方式复制 *foo{CODE} 中的内容?到其他地方而不是别名?或者有没有其他方法可以解决这个问题?

最佳答案

我自己想出来的。我必须使用 CODE typeglob 的一部分,而不是将整个 typeglob 分配给另一个 typeglob。这样它似乎制作了一个副本。

*old_foo = *foo{CODE};
require 'foo_killer.pl';
*foo = *old_foo{CODE};

brian d foy 在 Mastering Perl(第 131f 页)中也谈到了这一点,但没有提到复制部分。

关于perl - 如何防止子程序在 Perl 中被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com