我在使用Data :: Dumper尝试检查将大量数据导入到散列时遇到了一个相当奇怪的问题。Data :: Dumper包装第二个字的输出
我的数据在另一个文件中看起来像这样。
##Product ID => Market for product
ABC => Euro
XYZ => USA
PQR => India
在我的剧本
然后,我想在我的数据列表中读入一个哈希像这样:
open(CONFIG_DAT_H, "<", $config_data);
while(my $line = <CONFIG_DAT_H>) {
if($line !~ /^\#/) {
chomp($line);
my @words = split(/\s*\=\>\s/, $line);
%product_names->{$words[0]} = $words[1];
}
}
close(CONFIG_DAT_H);
print Dumper (%product_names);
我的分析是工作在大多数情况下,我可以找到所有的我的数据在哈希中,但是当我使用Data :: Dumper打印它时,它不能正确打印。这是我的输出。
$VAR1 = 'ABC';
';AR2 = 'Euro
$VAR3 = 'XYZ';
';AR4 = 'USA
$VAR5 = 'PQR';
';AR6 = 'India
有人知道翻车机打印''的原因吗?我的第二列数据前两个字母的字符?
在输入中看起来像回车('\ r')。 'chomp'不会摆脱它们,请尝试像'$ line =〜s/\ s + $ //'更强的东西 – mob
您需要传递一个引用'Dumper(\%product_names)',而不是' %h - > {key}'语法(但是'%h {key}') - 或者 - 如果'* product_names'实际上是一个hashref,那么你需要使用正确的sigil,'$ product_names - > {key }'和'Dumper($ product_names)'。 – zdim
看起来像正则表达式工作。为了确保我理解它,它正在修整任何类型的空白:\ n,\ r,\ t等等,从行尾开始。我不知道chomp()没有杀死其他类型的空白。 –