2016-12-10 72 views
0

以下:的Perl:打印對象的屬性名稱和值

for my $z (@$y) {        
    # prints number of observables for a given activity summary 
    # print STDERR 'property count'.keys $z 
    print Dumper($z); 
} 

打印:

$VAR1 = { 
      'activity' => 'walking', 
      'duration' => '591', 
      'calories' => 26, 
      'distance' => '435', 
      'steps' => 871, 
      'group' => 'walking' 
     }; 
$VAR1 = { 
      'steps' => 168, 
      'group' => 'walking', 
      'distance' => '100', 
      'activity' => 'walking', 
      'duration' => '200', 
      'calories' => 6 
     }; 

我如何可以遍歷每個屬性並打印其名稱和值?我使用Perl。

+2

'perldoc perldsc' – toolic

+0

可能的重複[迭代通過哈希中的散列數組在Perl中](http://stackoverflow.com/questions/12155607/iterate-through-array-of-hashes-in-a- hash-in-perl) –

回答

4

這裏有一種方法:

for my $z (@$y) { 
    for my $k (keys %$z) { 
     print "$k: $z->{$k}\n"; 
    } 
} 

有關更多信息,請參見keysperldoc -f keys; perldoc perldata有關哈希的一般信息(因爲您的$z值是哈希引用,而不是對象); perldoc perlreftut用於引用和嵌套數據結構。

+0

感謝您對散列引用的澄清 –

0

你可以試試這個:

my $z = { 
     'activity' => 'walking', 
     'duration' => '591', 
     'calories' => 26, 
     'distance' => '435', 
     'steps' => 871, 
     'group' => 'walking' 
    }; 


while((my $key, my $value) = each (%{$z})){ 
    print "key : $key -> value : $value\n"; 
} 
+1

通常不推薦使用'each',因爲它使用存儲在散列本身中的迭代器狀態。這可能會導致奇怪的行爲 - 距離錯誤。 – melpomene