从perl中的函数返回hash-ref



我编写了一个函数,它执行一个命令,根据正则表达式解析输出,并返回两个值,status和ip。函数调用按预期返回两个值。我想返回hash ref,而不是返回标量。有人能告诉我如何为下面的函数返回hash ref吗?

sub status {
    my ($self,$int)  = @_;
    my $status  = 0;
    my $ip = 0;
    my $cmd     = 'cisco ios command ' . $interface;
    my $out = $self->{sshObj}->exec($cmd);
    foreach my $line (  $out ) {
      if ( $line =~ m/Sessions+status:s+(.*)/ ) {
            $status = $1;
      }
      if ( $line =~ /(d+.d+.d+.d+)/ ) {
            $ip = $1;
      }
    }
    return ($status,$ip);
}

函数调用:

my ($status, $ip) =
           $self->{'$tunnel_obj'}->status($self->{'outer_t_1'});
    INFO ("status : $status");
    INFO ("ip : $ip");

Output :
status : UP
ip : 172.10.78.33

除了我在上面的评论中描述的疑虑之外,我会使用下面的代码

更改本质上是用散列%ret的元素替换$status$ip,然后返回对该散列的引用

但我必须再次指出,for循环将只执行一次,并且此代码是错误的。只有当你说出你正在处理的模块时,我才能纠正它

sub status {
    my ( $self, $int ) = @_;
    my $out = $self->{sshObj}->exec("cisco ios command $interface");
    my %ret;
    for ( $out ) {
        $ret{status} = $1 if /Sessions+status:s+(.*S)/;
        $ret{ip}     = $1 if /(d+.d+.d+.d+)/;
    }
    %ret;
}

您的功能调用将是

my $ret = $self->{$tunnel_obj}->status($self->{outer_t_1});
INFO("Status: $ret->{status}");
INFO("IP:     $ret->{ip})");

最新更新