0

我快要疯了。

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

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.

请帮忙

谢谢!!

4

1 回答 1

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 的速度,所以您花时间调试您的调试代码,而不是完成解决方案。

注意:在面向对象的 Perl 中,转储不是读取对象 API 的可接受替代,正如我在此处解释的那样。但特别是对于未受祝福的哈希(请参阅blessperlobj),它只是您想知道如何获取的结构化数据——这是要走的路。

最后,在这里我提到我最喜欢的工具是Smart::Comments. 您在哪里执行此操作:

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

并观看魔术。

于 2013-02-19T15:54:32.967 回答