2009年6月10日星期三

[PerlChina] Re: 如何用变量代替包名来调用包的函数?

On 6/6/09, 独孤九剑 <wxlfh2005@gmail.com> wrote:
> 但是,这个函数要求是构造函数(我不肯定,请高手斧正),因为Perl 面向对象的模块,其构造函数本身就是裸字调用,就是用模块名字这个字符串作为第
> 一个参数传入的。而实例方法一般要求为一个bless过的引用。
>

呵呵,CGI 模块比较特殊,它同时提供了包函数和 OO 这两种 API。楼主加了下面这行就是使用了前者,即所谓的"标准接口":

use CGI qw/:standard/;

> 具体到你这个问题,你没用面向对象的方法来使用,已经超出了我的知识范围,就无法回答你了。而且我觉得你的需求很奇怪,能不能换个思路?
>

即使对于纯 OO 的方法,也可以直接调包函数。这里有一个 OO 的例子:

$ perl -e '$a = Foo->new; $a->foo; package Foo; sub new { bless {
foo => 32 }, shift } sub foo { print $_[0]->{foo} }'
32

我们还可以很变态地这么写:

$ perl -e '$a = Foo::new('Foo'); Foo::foo($a); package Foo; sub new
{ bless { foo => 32 }, shift } sub foo { print $_[0]->{foo} }'
32

注意这里二者的区别。事实上,perl 底层的作法就是那样的(除了多态查找这里没有,这一主题和 C++ 里的虚函数有些类似,哈哈)。

Perl 就是好玩哦,哈哈!

Cheers,
-agentzh

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: