+ -
当前位置:首页 → 问答吧 → perl中如何封装带变参的函数

perl中如何封装带变参的函数

时间:2010-10-08

来源:互联网

比如要封装syslog,它的定义是:
syslog($priority, $format, @args)

那在封装时,该怎么收集参数传给它呢:
#本意想这样:mylog($flag, $priority, $format, @args);

sub mylog() {
    syslog($_[1], $_[2], $_[3]) if $_[0];  #好像这里这样写不行
}

作者: maxxfire   发布时间: 2010-10-08

本帖最后由 珞水的大叔 于 2010-10-08 12:26 编辑

当然不行啊,因为$_[3]不能代表数组@args,$_[3]只是数组@args的第一个元素啊

这样试试
  1. sub mylog() {
  2.     syslog(@_) if shift;
  3. }
复制代码

作者: 珞水的大叔   发布时间: 2010-10-08

这么说perl中的函数原型没什么意思了,比如我一个函数的原型是这样:
sub func($$@$) {...}
估计是实现不了。。

数组只能改成引用吧:
sub func($$\@$) {...}

作者: maxxfire   发布时间: 2010-10-08

回复 maxxfire


    貌似确实是这样……

作者: 珞水的大叔   发布时间: 2010-10-08

13.函数原型

     Perl中的函数原型是调用环境中的自动模板,而不像C中的那样。而且函数原型只影响那些不带&方式调用的函数。你必须十分注意函数原型是否将你的子函数带入了一个新的环境。因此,“最好在新函数中使用函数原型,但别在旧函数中使用函数原型。”如果你不小心,你可能因函数原型遇到很多麻烦。但如果你非常谨慎,你可以用函数原型出色地完成任务。

见 http://wangcong.org/articles/c2perl.html

作者: longbow0   发布时间: 2010-10-08