2014-01-19 82 views
1

打印我的哈希:哈希并不在Perl

while(my($key, $value) = each %sorted_features){ 
    print "$key: $value\n"; 
} 

,但我不能为$value获得正确的值。它给了我:

intron: ARRAY(0x3430440) 
source: ARRAY(0x34303b0) 
exon: ARRAY(0x34303f8) 
sig_peptide: ARRAY(0x33f0a48) 
mat_peptide: ARRAY(0x3430008) 

为什么呢?

回答

10

您的值是数组引用。你需要做类似

while(my($key, $value) = each %sorted_features) { 
    print "$key: @$value\n"; 
} 

换句话说,取消引用的参考。如果你不确定你的数据是什么样子,一个好主意是使用Data::Dumper模块:

use Data::Dumper; 
print Dumper \%sorted_features; 

你会看到类似这样的:

$VAR1 = { 
      'intron' => [ 
         1, 
         2, 
         3 
         ] 
     }; 

{表示哈希引用的开始,和[数组引用。

0

你的散列值是数组引用。您需要编写额外的代码,以显示这些数组的内容,但如果你是刚刚调试那么它可能是更容易使用Data::Dumper这样

use Data::Dumper; 
$Data::Dumper::Useqq = 1; 

print Dumper \%sorted_features; 

而且,顺便说一句,你的哈希的后顾之忧名称%sorted_features我。哈希本质上是未排序的,并且each检索元素的顺序基本上是随机的。

0

也可以使用Data::Dumper::Pertidy,它通过Perltidy运行Data :: Dump的输出。

#!/usr/bin/perl -w 

use strict; 
use Data::Dumper::Perltidy; 

my $data = [{title=>'This is a test header'},{data_range=> 
      [0,0,3, 9]},{format  => 'bold' }]; 

print Dumper $data; 

打印:

$VAR1 = [ 
    { 'title'  => 'This is a test header' }, 
    { 'data_range' => [ 0, 0, 3, 9 ] }, 
    { 'format'  => 'bold' } 
];