使用 map 将文件内容读入 perl 哈希



我正在尝试将文件的内容读入哈希 文件内容外观线,

A|A1
B|B1
C|C1

我拥有的代码是

use strict;
use warnings;
use Data::Dumper;
my $instAttribFileName="DATABYIDENTIFIER_InstCommonAttrList.config";
open(IFH,$instAttribFileName) or die "cannot open file";
my %attribhash = ();
%attribhash = map {chomp; split /|/} (<IFH>);
print Dumper %attribhash;

转储程序不打印哈希,而是将 A、A1 等读取到单独的变量中。

我在这里做错了什么?

根据perldoc perldata:

列表

对子列表进行自动插值。也就是说,当列表 已评估,则在列表上下文中评估列表的每个元素,并且 生成的列表值被内插到 LIST 中,就像每个 个别元素是LIST的成员。因此数组和哈希丢失 他们在列表中的身份

因此,您需要通过引用将哈希传递给Dumper()否则它将被扁平化为单独的参数列表。例如,如果您有:

my %foo = ( a => 'A', b => 'B');
print Dumper %foo;

输出

$VAR1 = 'b';
$VAR2 = 'B';
$VAR3 = 'a';
$VAR4 = 'A';

但是,如果您将引用传递给%foo(通过在前面放置反斜杠(:

print Dumper %foo;

我们得到:

$VAR1 = {
'b' => 'B',
'a' => 'A'
};

引用:

  • 数据::D umper
  • Perldoc Perlref
  • 如何在 Perl 中打印哈希的内容?

始终值得阅读您尝试使用的模块的所有文档。Data::D umper 手册中的"BUGS"部分说:

由于 Perl 子例程调用语义的限制,您无法传递数组或哈希。在它前面加上一个以传递其引用。

最新更新