还是研究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,"adf","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";
$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;
我的意图,是把所有用户界面关注的 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,"adf","kjgh");
#也可以写成:UIOper::AgentCall(‘haotestmode::MVpackage’,"adf","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};
$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;