【问题标题】:Perl Pass one of the Array in 'Array of Arrays' to a subroutinePerl 将“数组数组”中的一个数组传递给子例程
【发布时间】:2016-09-07 13:28:59
【问题描述】:

我正在解析一个 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";
}

The DumperShows that arrays are there in AOA .. 但我不确定如何在 Dive Function 中传递完整的数组?

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

【问题讨论】:

  • 当您调用GetAnalyticsDataInHash($json,'name','value,UveVirtualMachineAgent,vm_name') 时,您希望Dive 的参数是什么?
  • @AllArgumentsArray 不可能包含您所说的内容。

标签: arrays json perl multidimensional-array


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    GetAnalyticsData 看起来它应该接受任意数量的“哈希键的逗号分隔路径”类型的参数,例如'value,UveVirtualMachineAgent,vm_name'。所以要么你必须将所有这些传递给Dive(),例如使用数组引用:

    Dive($decoded_json, \@AllArgumentsArray);
    

    或者你遍历它们并将它们一一传递给 Dive。然后你可以在你拥有的循环中执行它,并且可以更清楚地写成这样:

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

    当然,您可能想对Dive() 的结果做点什么,但如果没有看到这个函数,我就无法判断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-24
      • 2021-03-09
      • 2011-08-06
      • 2012-05-30
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2013-08-12
      相关资源
      最近更新 更多