我接近让我发疯。
我有一个似乎没问题的数组。我的数组包含文件名(作为键)和数组值的完整路径。我检查它是否正常工作..到此为止确定。这是我的代码:
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
的键存在。
请帮助
谢谢!
答案 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 的可接受替代品。但特别是对于未经过散乱的哈希(请参阅bless
或perlobj
),您只想知道如何获取的结构化数据 - 它是最佳选择。
最后,我在这里提到我最喜欢的工具是Smart::Comments
。你这样做的地方:
use Smart::Comments;
...
### %hash_d
### @isect
### %hash_o
观看魔术。