Perl 当密钥来自列表时,哈希值为空
我快要发疯了 我有一个数组,看起来还可以。我的数组包含文件名(作为键)和数组值的完整路径。我检查了一下它是否正常工作。。到这里好的。这是我的密码:Perl 当密钥来自列表时,哈希值为空,perl,hash,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]; } 它给了我完整的散列,
open (FILE, "comb_d.txt");
@l = <FILE>;
foreach $line (@l) {
chomp($line);
my @linea = split(/separator/,$line);
$hash_d{$linea[0]} = $linea[1];
}
它给了我完整的散列,没有问题
问题来了。我不想使用数组中的所有文件名(所有键),只想使用一组文件名。实际上,@isect
上存储了一组密钥。但当我跑步时:
foreach my $llave ( @isect ) {
print "$llave = $hash_o{$llave}\n";
}
我的结果是:
filename1 =
filename2 =
我非常确定@isect
上的元素作为%hash\u o
的键存在
请帮忙
谢谢 对于这样的事情,我是你的朋友
use Data::Dumper qw<Dumper>;
...
$hash_d{$linea[0]} = $linea[1];
say Dumper( \%hash_d );
}
你花了很多时间做Data::Dumper
做的小吃。每次尝试这样做时,因为这是Perl代码,而且您可能无法跟上Perl的速度,所以您都要花时间调试调试代码,而不是完成解决方案
注意:正如我所解释的,在面向对象的Perl中,转储并不能代替读取对象的API。但特别是对于无lessed散列(请参见或),它只是结构化数据,您需要知道如何获取这些数据,这是一条很好的途径
最后,在这里我提到我最喜欢的工具是。在执行此操作时:
use Smart::Comments;
...
### %hash_d
### @isect
### %hash_o
看魔术 您能提供一些来自
comb_d.txt
和@isect
的行吗?my@linea=split(/separator/,$line)
你确定你想要分隔符而不是$separator
?%hash\u o
和%hash\u d
之间有什么区别?你说在%hash\u o
中打印键/值效果很好,然后跳过打印数组中的键@isect
,但你没有说明如何获得这些键,或者哈希包含什么。那我们怎么可能帮助你呢?记住使用use strict代码>和使用警告代码>。他们可能不会直接解决这个问题,但他们会在将来帮你省去一些麻烦。至于您遇到的具体问题,您如何填充@isect
?如果没有更多信息,这只是一个猜测,但是在这些条目进入@isect
之前,您是否对它们使用chomp
?
say Dumper( \@isect );
say Dumper( \%hash_o );
use Smart::Comments;
...
### %hash_d
### @isect
### %hash_o