2009年6月5日星期五

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

use CGI;
my $mod = "CGI";
my $obj = "$mod"->new;
或者:
my $obj = (eval {$mod})->new;
$obj->header;
但是,这个函数要求是构造函数(我不肯定,请高手斧正),因为Perl 面向对象的模块,其构造函数本身就是裸字调用,就是用模块名字这个字符串作为第
一个参数传入的。而实例方法一般要求为一个bless过的引用。

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

On 6月5日, 下午10时55分, silent <silent2...@gmail.com> wrote:
> #!/usr/bin/perl
>
> use strict;
> use warnings;
>
> use CGI qw/:standard/;
>
> my $mod = "CGI";
>
> #print CGI::header, "\n"; 不用这个方法,因为包名可能是动态载入的
> print $mod::header(), "\n";
>
> % perl mod.pl
> Name "mod::header" used only once: possible typo at mod.pl line 11.
> Can't use an undefined value as a symbol reference at mod.pl line 11.
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: