gpt4 book ai didi

perl - Data::Dumper 包装第二个单词的输出

转载 作者:行者123 更新时间:2023-12-05 00:38:09 24 4
gpt4 key购买 nike

我在使用 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 为什么要打印 ';我的第二列数据中前两个字母的字符数?

最佳答案

代码中有一个不清楚的地方:*product_names 是哈希还是哈希引用?

  • 如果是哈希,应该使用%product_names{key}语法,而不是%product_names->{key},并且需要传递一个引用Data::Dumper ,所以 Dumper(\%product_names)

  • 如果它是一个 hashref,那么它应该用正确的印记标记,所以 $product_names->{key}Dumper($product_names}

mob 所述如果您的输入有 \n 以外的任何内容,则需要更明确地清理它,比如每个评论使用 s/\s*$// 。查看ikegami的回答.

我还想补充一点,可以通过去掉 if 分支来简化循环

open my $config_dat_h, "<", $config_data  or die "Can't open $config_data: $!";

while (my $line = <$config_dat_h>)
{
next if $line =~ /^\#/; # or /^\s*\#/ to account for possible spaces

# ...
}

我已经更改为词法文件句柄,推荐的做法有很多优点。我还添加了对 open 的检查,它应该始终存在。

关于perl - Data::Dumper 包装第二个单词的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39799825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com