【发布时间】:2017-02-09 12:31:55
【问题描述】:
我在使用 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
有人知道 Dumper 为什么要打印 ';我的第二列数据的前两个字母上的字符?
【问题讨论】:
-
在输入中看起来像回车符 (
\r)。chomp不会摆脱它们,而是尝试像$line =~ s/\s+$//这样更强大的东西 -
你需要传递一个引用,
Dumper(\%product_names),而不是使用%h->{key}语法(但%h{key})——或者——如果*product_names实际上是一个hashref,那么你需要使用正确的印记,$product_names->{key}和Dumper($product_names)。 -
看起来该正则表达式有效。只是为了确保我理解它,它正在修剪任何类型的空格:\n、\r、\t 等......从行尾开始?我不知道 chomp() 没有杀死其他类型的空格。
-
也尝试设置
$Data::Dumper::Useqq = 1;。 -
@mob,在所有系统上都是
"\n"(除非你给它分配了别的东西)
标签: perl data-dumper