【发布时间】:2012-10-01 09:15:24
【问题描述】:
我正在使用遗留代码,并且必须 require 一个定义子 foo 的 .pl 文件。我的问题是,在我的 main:: 命名空间中已经有另一个子 foo,稍后在我目前不处理的程序的一部分中调用它。
我需要的文件定义了sub foo {},因为显然它不希望 foo 的事情发生在它通常被调用的地方。就我而言,这很糟糕。
我尝试过使用*foo glob:
*old_foo = *foo;
require 'foo_killer.pl';
*foo = *old_foo;
当然,这不起作用,因为我只创建了一个别名(正如 brian d foy 在 Mastering Perl 第 133 页上指出的那样),因此 *old_foo 将指向现在“空”子程序。
有没有办法以某种方式将*foo{CODE} 中的内容复制到其他地方而不是别名?或者有没有其他方法可以解决这个问题?
【问题讨论】:
-
你能在你自己的命名空间中重新定义你自己的
foo吗(例如将它包装到package Mine; sub foo {} ... package main;中,然后应用这个命名空间限定符来调用它? -
@raina77ow:第一个
foo完全来自其他地方。它甚至不是我的,它只是需要被调用。它打印网页的页脚,但我对它没有影响。但是,如果它被一个空子代替,我的网页底部就会丢失,这感觉有点像被你的裤子抓住了。 ;-) -
不,我已经谈到了命名空间'foo'你可以改变,而不是另一个。 )
-
@raina77ow:谢谢你的想法。在另一个
required 文件中,该文件超出了我的控制范围,该文件在应用程序的大多数部分中都在使用。我不明白我怎么能改变它。 :-/
标签: perl subroutine typeglob