Perl将'Array of Arrays'中的一个Array传递给子例程

时间:2016-05-11 22:57:17

标签: arrays json perl multidimensional-array

我正在解析一个JSON文件,我有一个数组数组@AllArgumentsArray ..带有这个AOA的数组是我将遍历的JSON部分。示例JSON是:

{
name: "myThing",
    value: {
    UveVirtualMachineAgent: {
        vm_name: "TuttyFruity"
        }
    }
},

现在我写的函数会得到很多参数,比如

&GetAnalyticsDataInHash($json,'name','value,UveVirtualMachineAgent,vm_name');

sub GetAnalyticsDataInHash{
    my @AllArgumentsArray;  #The rest of the arguments in an array
    my $decoded_json = $_[0];
    for (my $i=1;$i<=$#_;$i++){
        push @AllArgumentsArray, [ split /,/, $_[$i] ]; #split them and make array of arrays ..
    }

    print Dive($decoded_json, @AllArgumentsArray[0]), "\n";
}

DumperShows数组在AOA中...但是我不确定如何在潜水功能中传递完整数组?

DB<5> p Dumper @AllArgumentsArray
  $VAR1 = [
            'value',
            'UveVirtualMachineAgent',
            'vm_name'
          ];
  $VAR2 = [
            'value',
            'get',
            'this'
          ];

2 个答案:

答案 0 :(得分:0)

取消引用AOA并将其发送给Dive的方法是

print Dive($_, @{$AllArgumentsArray[0]});

答案 1 :(得分:0)

GetAnalyticsData看起来应该接受#34;以逗号分隔的哈希键路径的任意数量的参数&#34;有点像'value,UveVirtualMachineAgent,vm_name'。因此,您必须将所有这些传递给Dive(),例如使用arrayref:

Dive($decoded_json, \@AllArgumentsArray);

或者你循环它们并将它们一个接一个地传递给Dive。然后你可以在你所拥有的循环中完成它,这可以更清楚地写成:

sub GetAnalyticsDataInHash{
    my $decoded_json = shift;
    for my $path (@_) {
        Dive($decoded_json, [ split /,/, $path ]);
    }
}

当然,你可能想要用Dive()的结果做点什么,但是我不能在没有看到这个功能的情况下说出来。