【问题标题】:Perl: array de-referencePerl:数组取消引用
【发布时间】:2012-08-07 03:44:20
【问题描述】:

我正试图弄清楚如何取消引用数组中的值但遇到了死胡同,我试图研究这个问题但需要一些帮助。

我正在从 infoblox 数据库中获取一些数据并尝试在结果中搜索以查找主机条目的 mac 地址,数据作为由以下代码生成的哈希值存在于数组中:

use strict;
use Data::Dumper;
my @results = $session->get(
   object  => "Infoblox::DNS::Host",
   name    => "test.com.au",
   ipv4addrs   => ".*.",
   view    => "external"
);

我正在使用“$_->ipv4addrs”在数据结构的高级别取消引用,然后使用以下代码循环输出:

foreach (@results) {
    my @search = $_->ipv4addrs;        
         foreach (@search) {
             print Dumper($_) . "\n";
    }
}

使用 Data::Dumper 打印以下输出:

$VAR1 = [
      bless( {
               'network' => '111.111.111.0/25',
               'options' => [],
               'dynamic' => 'false',
               '__version' => '4.2r5-5-68691',
               'VIEW_FUNCTION' => {
                                    'remove' => '.com.infoblox.perl_api.Infoblox.DHCP.remove_fixed_address',
                                    'search' => '.com.infoblox.perl_api.Infoblox.DHCP.search_fixed_address',
                                    'add' => '.com.infoblox.perl_api.Infoblox.DHCP.insert_fixed_address',
                                    'add_using_template' => '.com.infoblox.perl_api.Infoblox.DHCP.insert_fixed_address_using_template',
                                    'get' => '.com.infoblox.perl_api.Infoblox.DHCP.get_fixed_address',
                                    'modify' => '.com.infoblox.perl_api.Infoblox.DHCP.modify_fixed_address'
                                  },
               'ipv4addr' => '111.111.111.111',
               'match_client' => 'MAC',
               'mac' => '00:11:00:11:00:11',
               'disable' => 'false',
               '__type' => '.com.infoblox.perl_api.Infoblox.DHCP.FixedAddr'
             }, 'Infoblox::DHCP::FixedAddr' )
    ];

但如果我尝试在 'foreach (@searh)' 循环中使用 '$_->mac' 调用引用,则会出现错误:

 "Can't call method "mac" on unblessed reference at ./connect_test.pl line nn."

我的编码技能在这一点上失败了,任何信息或指导将不胜感激。

【问题讨论】:

    标签: perl multidimensional-array


    【解决方案1】:

    数组中的第一个元素是祝福引用。

    $_->[0]->mac
    

    您可以使用 -> 运算符(如上)直接访问数组引用中的元素,或者将它们完全取消引用到列表:@list = @{$array_reference}

    【讨论】:

    • 非常感谢,只要你知道怎么做就简单了。
    【解决方案2】:

    @search 中存储的每个项目本身就是一个数组引用。

    # If arrayref contains only one     | # If multiple objects expected
    # Infoblox::DHCP::FixedAddr object  | # inside @search
                                        |
                                        |
    foreach ( @search ) {               | foreach my $item ( @search ) {
                                        | 
        my $obj = shift @$_;            |     foreach my $obj ( @$item ) {
        my $mac = $obj->mac;            |
    }                                   |         my $mac = $obj->mac;
                                        |     }
                                        | }
    

    【讨论】:

    • 感谢 Zaid 提供的示例,这在我的知识库中消除了相当大的空白。
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 2018-02-25
    • 2021-03-23
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多