return 来自 perl 函数的哈希引用
return hash ref from a function in perl
我写了一个函数,它执行一个命令,根据正则表达式解析输出,returns 两个值,status 和 ip。函数调用 returns 两个值都符合预期。我不想 return 标量,而是 return 散列引用。有人可以告诉我如何为以下函数做 return 哈希引用吗?
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 = ;
}
if ( $line =~ /(\d+.\d+.\d+.\d+)/ ) {
$ip = ;
}
}
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
除了我在上面的评论中描述的疑虑之外,我会使用下面的代码
更改本质上是将 $status
和 $ip
替换为散列 %ret
的元素,然后 return 对该散列
的引用
但是我必须再说一遍for
循环只会执行一次,这段代码是错误的.只有你说你正在处理什么模块我才能更正它
sub status {
my ( $self, $int ) = @_;
my $out = $self->{sshObj}->exec("cisco ios command $interface");
my %ret;
for ( $out ) {
$ret{status} = if /Session\s+status:\s+(.*\S)/;
$ret{ip} = if /(\d+.\d+.\d+.\d+)/;
}
\%ret;
}
你的函数调用是
my $ret = $self->{$tunnel_obj}->status($self->{outer_t_1});
INFO("Status: $ret->{status}");
INFO("IP: $ret->{ip})");
我写了一个函数,它执行一个命令,根据正则表达式解析输出,returns 两个值,status 和 ip。函数调用 returns 两个值都符合预期。我不想 return 标量,而是 return 散列引用。有人可以告诉我如何为以下函数做 return 哈希引用吗?
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 = ;
}
if ( $line =~ /(\d+.\d+.\d+.\d+)/ ) {
$ip = ;
}
}
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
除了我在上面的评论中描述的疑虑之外,我会使用下面的代码
更改本质上是将 $status
和 $ip
替换为散列 %ret
的元素,然后 return 对该散列
但是我必须再说一遍for
循环只会执行一次,这段代码是错误的.只有你说你正在处理什么模块我才能更正它
sub status {
my ( $self, $int ) = @_;
my $out = $self->{sshObj}->exec("cisco ios command $interface");
my %ret;
for ( $out ) {
$ret{status} = if /Session\s+status:\s+(.*\S)/;
$ret{ip} = if /(\d+.\d+.\d+.\d+)/;
}
\%ret;
}
你的函数调用是
my $ret = $self->{$tunnel_obj}->status($self->{outer_t_1});
INFO("Status: $ret->{status}");
INFO("IP: $ret->{ip})");