2016-09-01 80 views
-2

您好我有一个Perl散列定义为:打印Perl的散列键值(键是一个数组)

foreach my $pair (@correlatedPttns) 
{  
    # slice the data out 
    my @tmp =(); 
    for (my $x = 0; $x<$cnt; $x++) 
    {  
     push @tmp,[ @{ $data[$x] } [ 0, @$pair[0], @$pair[1] ] ]; # epochtime, Pi, Pj 
    }  

    #build hash 
    $pairToDataHash{Dumper(@$pair)} = \@tmp; 
} 

如果输出散列值,打印自卸车(\%pairToDataHash),它将看起来像:

$VAR1 = { 
      '$VAR1 = 30; 
$VAR2 = 31; 
' => [ 


             [  
             'TIME', 
             'P30', 
             'P31' 
             ],  
             [  
             '1398038853', 
             '0', 
             '0' 
             ],  

如何获得单个密钥,因为密钥是通过Dumper形成的阵列。我需要访问$ VAR1 = 30的值。我如何获得钥匙的元素?

for (keys %pairToDataHash) 
{ 
     #get the key element value. 
} 
+0

什么是“@ProtectedPttns”,“@ data”和“$ cnt”?你有'使用严格'和'使用警告''全部'吗? – Borodin

+0

您的主题行显示'print Perl hash key value(key是一个数组)',但Perl散列键只能是一个简单的C字符串:它甚至不是一个Perl字符串。 – Borodin

回答

-1

没有评论是否你的计划散列键可以改进......

输出Data::Dumper适合于被传递给Perl的eval功能。

for (keys %pairToDataHash) 
{ 
    my ($VAR1,$VAR2);  # required for 'use strict' 
    eval $_; 
    ... now $VAR1, $VAR2 are loaded 
} 
1

Data :: Dumper是一个调试工具。在这里使用是不合适的。

看起来你有对的整数,所以只需使用

$pairToDataHash{ join ':', @$pair } 

for (keys %pairToDataHash) { 
    my @pair = split /:/; 
    ... 
} 

如果您浮点数而是使用

$pairToDataHash{ pack 'd*', @$pair } 

for (keys %pairToDataHash) { 
    my @pair = unpack 'd*'; 
    ... 
} 
相关问题