Return 来自散列函数的多个值
Return multiple values from a function in hash
我创建了一个函数,它基本上登录到路由器,执行命令,解析命令输出并打印 Peer status
和 Peer ip
函数 returns 的值符合预期。除了状态和对等 ip,如果我想 return 3 个值,例如:$session_id、$session_state 和 $time。我该怎么做 hash ?我希望函数 return 哈希中的所有五个值。
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 = ;
}
if ( $line =~ m/Peer:\s+(\d+.\d+.\d+.\d+)/ ) {
$peer_ip = ;
}
}
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
试试这个:
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
我创建了一个函数,它基本上登录到路由器,执行命令,解析命令输出并打印 Peer status
和 Peer ip
函数 returns 的值符合预期。除了状态和对等 ip,如果我想 return 3 个值,例如:$session_id、$session_state 和 $time。我该怎么做 hash ?我希望函数 return 哈希中的所有五个值。
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 = ;
}
if ( $line =~ m/Peer:\s+(\d+.\d+.\d+.\d+)/ ) {
$peer_ip = ;
}
}
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
试试这个:
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