我在使用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()沒有殺死其他類型的空白。 –