【发布时间】:2014-02-20 17:42:33
【问题描述】:
我已经问过一个类似的问题,但它更多地与对函数使用裸词有关。基本上,当我开始学习 perl 中的“包”和 OOP 时,我正在重构我的一些代码。由于我的模块都没有使用“包”,所以我可以将它们“要求”到我的代码中,并且我能够毫无问题地使用它们的变量和函数。但是现在我创建了一个模块,我将用作对象操作的类,并且我希望继续能够以相同的方式在其他模块中使用我的函数。没有多少阅读文档和教程能完全回答我的问题,所以请,如果有人可以解释它是如何工作的,以及为什么,那将有很长的路要走,而不是“这就是你的做法”-键入答案。
也许这可以说明问题:
我的文件.cgi:
require 'common.pm'
&func_c('hi');
print $done;
common.pm:
$done = "bye";
sub func_c {print @_;}
将按预期打印“hi”然后“bye”。
我的文件_obj.cgi:
use common_obj;
&func_obj('hi');
&finish;
common_obj.pm:
package common_obj;
require 'common.pm';
sub func_obj {&func_c(@_);}
sub finish {print $done;}
给出“未定义的子程序func_c ...”
我(有点)了解命名空间等,但我不知道如何在无需修改 common.pm 的情况下实现我想要的结果(让 func_obj 能够从 common.pm 调用 func_c) (这可能会破坏依赖于它工作方式的其他模块和脚本)。我知道在 BEGIN 中将 use 及其 import() 称为“要求”。但同样,这需要修改 common.pm。我想要完成的事情有可能吗?
【问题讨论】:
-
你真的不想这样做。您正在编写 Perl 4 风格的代码,而自 1993 年以来就没有这样做过。
-
不想做什么?为什么不呢?
标签: perl perl-module