如何访问存储在哈希引用的数组引用中的值?

时间:2014-08-22 19:34:32

标签: arrays perl hash reference

我正在使用Perl的Samba::Smbstatus模块。文档说,值是在哈希引用的数组引用中返回的。我将如何获取价值?

我已经尝试了一些方法并且无处可去。

4 个答案:

答案 0 :(得分:1)

use Data::Dumper;

for my $hash_reference (@$aray_reference) {

  # to check what keys are available
  # print Dumper $hash_reference; 

  print $hash_reference->{attr1}, $hash_reference->{attr2};
}

答案 1 :(得分:0)

使用Data::Dumper并打印结果。这可以帮助您在获得的结果中访问您要查找的信息。

想象一下你的结构是这样的:

my $data = [ {one=>1, two=>2}, {three=>3, four=>4} ];
# Access three key this way:
print $data->[1]->{three}, "\n";

答案 2 :(得分:0)

我认为你在谈论services方法的回报?

这是访问结构中所有数据的一种方法。

首先,使用$services取消引用@$services数组引用,然后可以使用for循环对其进行迭代,就像任何其他数组一样。

每个元素$service都是哈希引用。如果您再次查看文档,则会看到它包含密钥servicepidmachineconnected。要使用引用访问哈希元素,请编写$hashref->{key}。所以我添加了四个printf语句来打印这四个元素的值。

我无法对此进行测试,但语法会检出。

use strict;
use warnings;

use Samba::Smbstatus;

my $smbstats = Samba::Smbstatus->new;

my $services = $smbstats->services;

for my $service (@$services) {
  printf "Service:   %s\n", $service->{service};
  printf "PID:       %s\n", $service->{pid};
  printf "Machine:   %s\n", $service->{machine};
  printf "Connected: %s\n", $service->{connected};
}

答案 3 :(得分:0)

如果你得到$ arrayRef,那么你需要做的就是获得所有的值

for my $hashRef (@$arrayRef) {
    foreach my $key (keys %$hashRef) {
       print $hashRef->{$key}, "\n";
    }
}