-1

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

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/Session\s+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
4

1 回答 1

3

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

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

但我必须再说一遍,for循环只会执行一次,而这段代码是错误的。只有当您说出您正在处理的模块时,我才能更正它

sub status {

    my ( $self, $int ) = @_;

    my $out = $self->{sshObj}->exec("cisco ios command $interface");

    my %ret;

    for ( $out ) {
        $ret{status} = $1 if /Session\s+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})");
于 2016-04-13T02:13:14.490 回答