还是研究perl.
我的意图,是把所有用户界面关注的 perl调用,用一个函数进行包装。
所以,我需要进行一层Wrap.
也就是说,函数要调用函数。
经过与同事几个小时的研究,两人一番讨论。
终于找到了方法。
这里面有两个关键问题,一个是函数指针,另一个是参数。
参数对于PERL来说,真不是问题,这是我这一个多月,感触最深的。是PERL的灵魂。
但函数指针,走了大半天弯路才明白写法:
UIOper::AgentCall( \& haotestmode::MVpackage,"adf","kjgh");
我一开始,少了前面的取址符。也真是够透豆的。
结果是,先调用了haotestmode::MVpackage,然后说一个参数也没拿到。
好了,代码附上:
test.pl
#! /usr/bin/perl
use UIOper;
use haotestmode;
UIOper::AgentCall(\&haotestmode::MVpackage,"kjgh");
package UIOper;
#use haotestmode;
#comment of mvpackage
%FuncMap=('haotestmode::MVpackage'=>\&haotestmode::MVpackage);
sub AgentCall
{
my ($a,@xx)=@_;
print "AgentCall called.\n";
print "@xx\n";
我的意图,是把所有用户界面关注的 perl调用,用一个函数进行包装。
所以,我需要进行一层Wrap.
也就是说,函数要调用函数。
经过与同事几个小时的研究,两人一番讨论。
终于找到了方法。
这里面有两个关键问题,一个是函数指针,另一个是参数。
参数对于PERL来说,真不是问题,这是我这一个多月,感触最深的。是PERL的灵魂。
但函数指针,走了大半天弯路才明白写法:
UIOper::AgentCall( \& haotestmode::MVpackage,"adf","kjgh");
我一开始,少了前面的取址符。也真是够透豆的。
结果是,先调用了haotestmode::MVpackage,然后说一个参数也没拿到。
好了,代码附上:
test.pl
#! /usr/bin/perl
use UIOper;
use haotestmode;
UIOper::AgentCall(\&haotestmode::MVpackage,"kjgh");
#也可以写成:UIOper::AgentCall(‘haotestmode::MVpackage’,"kjgh");
package UIOper;
#use haotestmode;
#comment of mvpackage
%FuncMap=('haotestmode::MVpackage'=>\&haotestmode::MVpackage);
sub AgentCall
{
my ($a,@xx)=@_;
print "AgentCall called.\n";
print "@xx\n";
my $funcptr= $FuncMap{'haotestmode::MVpackage'};
# 也可以写作: my $funcptr= $FuncMap{$a};
#my $funcptr= $a; $funcptr->(@xx); return 1; } 1; haotestmode.pl #! /usr/bin/perl package haotestmode; #comment of mvpackage sub MVpackage { my ($a,$b)=@_; print "MVpackage called.\n"; print "$a,$b\n"; return 1; } 1;