密钥来自列表时哈希值为空值

时间:2013-02-19 15:08:36

标签: perl hash

我接近让我发疯。

我有一个似乎没问题的数组。我的数组包含文件名(作为键)和数组值的完整路径。我检查它是否正常工作..到此为止确定。这是我的代码:

open (FILE, "comb_d.txt");
@l = <FILE>;
foreach $line (@l) {
    chomp($line);
    my @linea = split(/separator/,$line);
    $hash_d{$linea[0]} = $linea[1];
}

正如我所说..它有效,因为我证实了:

foreach my $llave (keys %hash_o) {
    print "$llave = $hash_o{$llave}\n";
}

它给了我完整的哈希没有问题..

这就是问题所在。我不想在我的阵列上使用所有文件名(所有键),只是一组。实际上,@isect上存储了一组密钥。但是当我跑步时:

foreach my $llave ( @isect ) {
    print "$llave = $hash_o{$llave}\n"; 
}

我的结果是:

filename1 = 
filename2 = 

我很确定@isect上的元素作为%hash_o的键存在。

请帮助

谢谢!

1 个答案:

答案 0 :(得分:1)

对于这样的事情,Data::Dumper是你的朋友。

use Data::Dumper qw<Dumper>;

...

    $hash_d{$linea[0]} = $linea[1];
    say Dumper( \%hash_d );
}

然后是:

say Dumper( \@isect );
say Dumper( \%hash_o );

你花了很多时间做Data::Dumper为小吃做的事情。每次尝试尝试执行此操作时,因为它的Perl代码并且因为您可能无法快速使用Perl,所以您需要花时间调试 debug 代码,而不是完成解决方案。

注意:正如我解释here一样,在面向对象的Perl中,转储不是读取对象的API 的可接受替代品。但特别是对于未经过散乱的哈希(请参阅blessperlobj),您只想知道如何获取的结构化数据 - 它是最佳选择。

最后,我在这里提到我最喜欢的工具是Smart::Comments。你这样做的地方:

use Smart::Comments;
...
### %hash_d
### @isect
### %hash_o

观看魔术。