加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – 如何在Perl中迭代对哈希数组的引用?

发布时间:2020-12-15 23:22:11 所属栏目:大数据 来源:网络整理
导读:我引用了一个hases数组,我将其传递给perl脚本中的子例程 这是代码: sub mySub { (my $resultref) = @_; my @list = @$resultref; print Dumper(@list); foreach my $result (@list) { print Dumper($result); }} 这是输出: $VAR1 = [ { 'portName' = '1.1'
我引用了一个hases数组,我将其传递给perl脚本中的子例程

这是代码:

sub mySub {
    (my $resultref) = @_;
    my @list = @$resultref;
    print Dumper(@list);
    foreach my $result (@list) {
        print Dumper($result);
    }
}

这是输出:

$VAR1 = [
          {
            'portName' => '1.1','ips' => [
                       '192.168.1.242'
                     ],'switchIp' => '192.168.1.20','macs' => [
                        '00:16:76:9e:63:47'
                      ]
          },{
            'portName' => '1.10','ips' => [
                       '192.168.1.119','192.168.1.3'
                     ],'macs' => [
                        'd0:67:e5:f8:7e:7e','d0:67:e5:f8:7e:76'
                      ]
          },];

$VAR1 = [
          {
            'portName' => '1.1',];

循环将整个数组放入$result变量中.我尝试将其解除引用为@ $result [0]但没有成功.

如何单独循环这些哈希?

谢谢!

解决方法

Data::Dumper的Dumper函数的参数应该是引用.例如.:

use Data::Dumper;
my @array = ([1,2,3],[11,22,33]); # Two-dimensional array
print Dumper @array;               # print array
print Dumper @array;              # print reference to array

输出:

$VAR1 = [
          1,3
        ];
$VAR2 = [
          11,33
        ];

$VAR1 = [
          [
            1,3
          ],[
            11,33
          ]
        ];

第二个印刷品在一个变量中给出了整个结构.当你直接打印数组时,它会扩展到它的所有元素,所以…

print Dumper @array;

相当于:

print Dumper $array[0],$array[1],...,$array[$#array];

所以,在你的情况下,只需:

sub mySub {
    my ($resultref) = @_;
    print Dumper $resultref;
}

访问内部变量:

只需看看Data :: Dumper的输出:

$VAR1 = [    # bracket denotes start of an array ref
          {  # curly brackets = hash ref
            'portName' => '1.1',# hash ref ends,comma = new array element begins
          {  # new hash ref 
            'portName' => '1.10',# end of hash
        ];   # end of array

这里要注意的重要一点是数组的所有元素,以及散列的所有值都是标量.因此,所有哈希和数组都可以轻松地分解为标量列表.

for my $aref (@$resultref) {  # starting array ref
    for my $aref2 (@$aref) {  # second level array ref
        for my $href (@$aref2)  # here begins the hash
            local $ = "n";    # add newline to print for simplicity
            print $href->{portName};    # printing a scalar
            print for @{$href_>{ips}};  # printing an array ref w post-script loop
            print $href->{switchIp};
            print for @{$href->{macs}};
        }
    }
}

请注意使用箭头运算符取消引用引用.如果你有一个哈希或数组,你可以使用$array [0]或$hash {$key},但是通过使用引用,你可以“指向”引用中包含的地址:$array-> [0]或$hash-> {$key}.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读