我试图传递这个数组,但只有数字到我的Perl函数

时间:2016-06-08 17:34:56

标签: perl

Perl初学者在这里。我正在为我的工作编写一个小型自动化脚本。我需要传递一组数字作为输入(从JSON文件开始输入)到我的Perl函数中。这是我的代码:

my $idFile='GNOC_IDS.json';
my $idJSON;
{
    local $/;
    open my $fh, '<', $idFile or die $!;
    $idJSON = <$fh>;
    close $fh;
}
my $id_array = decode_json $idJSON;
my @decodedIDS = Dumper(\$id_array);
foreach my $ids(@decodedIDS){
    print $ids;
    my $results= $client->get_entities(
            entity_id=>$ids

            );
    print Dumper(\$results);
}

但是,我的问题是$ ID具有以下格式:

[       {
          'MISC' => '1743'
        },
        {
          'MISC' => '1743'
        },
        {
          'MISC' => '1733'
        },
        {
          'MISC' => '2736'
        },
        {
          'MISC' => '1763'
        },
        {
          'MISC' => '3133'
        },
        {
          'MISC' => '1743'
        },
        {
          'MISC' => '1733'
        },
        {
          'MISC' => '2802'
        },
        {
          'MISC' => '1699'
        },
        {
          'MISC' => '2736'
        },
        {
          'MISC' => '2600'
        }
]

我想要的只是将数字(例如1699,2735等)输入到“get_entities”中。函数,因为现在它给我一个&#34;输入必须是整数错误&#34;。

2 个答案:

答案 0 :(得分:2)

假设您的Dumper如下,您可以使用map代替use warnings; use strict; use Data::Dumper; my $id_array = [ { 'MISC' => '1743' }, { 'MISC' => '1743' }, { 'MISC' => '1733' }, { 'MISC' => '2736' }, { 'MISC' => '1763' }, { 'MISC' => '3133' }, ]; my @decodedIDS = map { $_->{MISC} } @{ $id_array }; print Dumper(\@decodedIDS); __END__ $VAR1 = [ '1743', '1743', '1733', '2736', '1763', '3133' ]; 来访问这些数字:

{{1}}

答案 1 :(得分:-1)

有两种方法可以做到这一点,在循环之前展平或在循环中引用每个项目的数据。

拼合:

…
foreach my $ids (map {$_->{'MISC'}} @decodedIDS){ …
…

或参考内容:

…
foreach my $ids (@decodedIDS) {
    print $ids->{'MISC'};
…