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