如何声明函数并递归使用它而不"太早调用原型"

pet*_*ynx 6 perl prototype

我有一个通用和递归函数,但为什么它没有在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个错误代码"pv()太早检查原型"这条线返回连接(',',map {pv($ _)} @ $ vars);

Ste*_*ker 8

简单:前瞻性声明

sub pv($);
sub pv($) {
Run Code Online (Sandbox Code Playgroud)

  • 如[perlsub](https://perldoc.perl.org/perlsub.html#Prototypes)中所述. (2认同)