簡體   English   中英

如何從perl中哈希內的數組中打印元素

[英]How to print an element from an array which is inside the hash in perl

我正在嘗試從 API 打印多維格式的輸出。

use strict;
use warnings;
use Data::Dumper;

my $content={
  'school_set' => 'SSET1234',
  'result' => [
    {
      'school_name' => 'school_abc',
      'display_value' => 'IL25',
      'school_link' => 'example.com',
      'status' => 'registerd',
      'status_message' => 'only arts',
      'school_id' => '58c388d40596191f',
    }
  ],
  'school_table' => 'arts_schools'
};

print "school_name is=".$content{result}[0]{school_name};
print "school_status is=".$content{result}[3]{status};
output
Global symbol "%content" requires explicit package name (did you forget to declare "my %content"?) at test8.pl line 20.
Global symbol "%content" requires explicit package name (did you forget to declare "my %content"?) at test8.pl line 21.

我必須從結果中打印如下輸出。

school_name = school_abc
school_status = registered

如果$content是哈希引用,則需要先取消引用它。 為此使用箭頭運算符:

$content->{result}[0]{school_name}

沒有箭頭的語法僅適用於%content

my %content = ( result => [ { school_name => 'abc' } ] );
print $content{result}[0]{school_name};

如果要打印所有結果,則必須以某種方式遍歷數組。 例如

#!/usr/bin/perl
use warnings;
use strict;

my $content = {
    'result' => [
        {
            'school_name' => 'school_abc',
            'status' => 'registerd',
        },
        {
            'school_name' => 'school_def',
            'status' => 'pending',
        }
    ],
};

for my $school (@{ $content->{result} }) {
    print "school_name is $school->{school_name}, status is $school->{status}\n";

}

您的數據結構假定為一個數組,也許將循環輸出用於感興趣的數據會很有用。

數據以哈希引用的形式呈現,需要取消引用才能循環遍歷數組。

以下代碼片段基於您發布的代碼,並演示了如何實現所需的輸出。

use strict;
use warnings;
use feature 'say';

my $dataset = {
              'school_set' => 'SSET1234',
              'result' => [
                {
                  'school_name' => 'school_abc',
                  'display_value' => 'IL25',
                  'school_link' => 'example.com',
                  'status' => 'registerd',
                  'status_message' => 'only arts',
                  'school_id' => '58c388d40596191f',
                }
              ],
              'school_table' => 'arts_schools'
            };

for my $item ( @{$dataset->{result}} ) {
    say "school_name is   = $item->{school_name}\n"
      . "school_status is = $item->{status}";
}

exit 0;

輸出

school_name is   = school_abc
school_status is = registerd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM