2016-12-10 43 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