【问题标题】:Perl passing 3D hash indexes as stringsPerl 将 3D 哈希索引作为字符串传递
【发布时间】:2016-08-31 19:33:55
【问题描述】:

我正在执行 JSON 解析以及我从所有 JSON 文件中获得的最终哈希值。被调用的函数正在传递我需要打印的索引条目。如果我尝试按原样放置变量..它会因错误而死。 注释掉的行是我想要得到的......使用这个函数的原因是传递不同的值并获得我需要的任何类型的组合。

&Function('{value}{Agent}{macName}')


sub Function(){
    my $key = $_[0];
    my $URL = "www.xyz.com";
    my $json = get( $URL );
    my $decoded_json = decode_json( $json );

    for ( @{$decoded_json->{value}} ) {
       #print $_->{value}{Agent}{macName}."\n";
       print $_->$key."\n";

    }
}


Can't call method "{value}{Agent}{macName}" on unblessed reference at Json_Decoder.pl line 34.

如何访问此条目? print $_->{value}{Agent}{macName} ... 通过使用此函数的 '{value}{Agent}{macName}' 参数。

【问题讨论】:

    标签: json perl hash hashmap


    【解决方案1】:

    使用Data::Diver,可以将哈希键的“路径”指定为列表:

    #!/usr/bin/perl
    use warnings;
    use strict;
    
    use Data::Diver qw{ Dive };
    
    sub Function {
        my $key = shift;
        my $decoded_json = { value => { Agent => { macName => 'name' } } };
        my @path = split /\}\{/, $key;
        $path[-1] =~ s/\}$//;
        $path[0]  =~ s/^\{//;
    
        print Dive($decoded_json, @path), "\n";
    }
    
    
    Function('{value}{Agent}{macName}');
    

    还请注意,您不需要 & 来调用该函数,并且空原型 () 在您的代码中是错误的(但由于函数在“声明之前”被调用而被忽略)。详情请见perlsub

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 2013-02-04
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多