2016-03-21 20 views
-1

私は本質的にルータにログインし、コマンドを実行し、コマンド出力を解析して、Peer statusPeer ipを返しました。
関数は値を期待どおりに返します。ステータスとピアIPに加えて、もし私が3つの値を返そうとしているならば、例えば$ session_id、$ session_state、$ timeと答えます。ハッシュでどうすればいいですか?関数が5つの値すべてをハッシュで返すようにしたい。ハッシュの関数から複数の値を返します

sub session_status { 
    my ($self,$interface_name) = @_; 
    my $status = 0; 
    my $peer_ip = 0; 

    #command to chek the status 
    my $cmd  = 'show crypto session interface ' . $interface_name; 
    $self->_login(); 
    my $tunnel_status = $self->exec($cmd); 

    #Regex to match the 'tunnel status' and 'peer ip' string in the cmd output 

    foreach my $line ( $tunnel_status) { 
     if ($line =~ m/Session\s+status:\s+(.*)/) { 
      $status = $1; 
     } 
     if ($line =~ m/Peer:\s+(\d+.\d+.\d+.\d+)/) { 
      $peer_ip = $1; 
     } 
    } 
    return ($status,$peer_ip); 
} 

ファンクションコール:

my ($tunnel_status, $peer_ip) = $sshobject->session_status("Tunnel1"); 
    print "TUNNEL STATUS : $tunnel_status\n"; 
    print "PEER IP : $peer_ip\n"; 

出力:

TUNNEL STATUS : DOWN 
PEER IP : 100.81.1.42 

答えて

2

はこのお試しください:

return { 'status' => $status, 'peer_ip' => $peer_ip, 
    'session_id' => $session_id, 'session_state' => $session_state, 
    'time' => $time }; 

をそして、あなたがこれを行うことができます:

my $stuff = $sshobject->session_status("Tunnel1"); 
print "TUNNEL STATUS : $stuff->{'status'}\n"; 
print "PEER IP : $stuff->{'peer_ip'}\n"; 
# etc 
+0

関数でハッシュを定義するにはどうすればよいですか? – virat

+1

@virat Martinは、あなたに必要なものすべてを与えてくれました(+1)!彼のreturn文は、5つのキーと値のペアを持つ匿名ハッシュへの参照を返します。明示的に定義することなく '(...)'リストを返したように、明示的に定義することなくハッシュリファレンスを返しました。 – PerlDuck

+1

ありがとう、@PerlDog! –

関連する問題