我正在尝试将文件的内容读入哈希 文件内容外观线,
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 子例程调用语义的限制,您无法传递数组或哈希。在它前面加上一个
以传递其引用。