我有一个通用的递归函数,但它为什么没有在perl的授权
sub pv($) {
my ($vars) = @_;
if(ref($vars) eq 'SNMP::Varbind') {
return $vars->tag() . (defined($vars->iid()) ? '.' . $vars->iid() : '');
} elsif (ref($vars) eq 'SNMP::VarList') {
return join(', ', map { pv($_) } @$vars);
} elsif(ref($vars) eq 'ARRAY') {
return join('.', @{$vars});
} else {
return $vars;
}
}
此错误代码 “PV()称为太早检查原型” 这一行回报加入( '',地图{PV($ _)} @ $瓦尔);
很简单:向前声明
sub pv($);
sub pv($) {
Perl的5.16+,您可以使用current_sub feature:
use strict;
use warnings;
use feature 'current_sub';
sub pv($) {
...
__SUB__->($_)
...
}
使用匿名潜艇的时候,让你不创建一个存储周期(,这不符合命名的潜艇发生,因为它只是看起来了符号,因为它会关闭在到自身的引用)这是更为有用。
此外,还应考虑只是不使用原型。这很可能是你并不需要它,除非你知道你为什么这样做;原型解析器,而不是调用。如果没有原型,用括号调用它足以将延迟符号查找。