当前位置:  开发笔记 > 编程语言 > 正文

如何将文件加载到Perl哈希?

如何解决《如何将文件加载到Perl哈希?》经验,为你挑选了2个好方法。

给出以下文件:

department=value1
location=valueA
location=valueB
department=value2

我使用以下内容将文件加载到Perl哈希:

use File::Slurp;
use Data::Dumper;
my %hash = map {
   s/#.*//;
   s/^\s+//;
   s/\s+$//;
   m/(.*?)\s*=\s*(.*)/;
} read_file($file);
print Dumper(\%hash);

但结果如下:

$VAR1 = {
          'location' => 'valueB',
          'department' => 'value2'
        };

如何将上述文件加载到哈希中,比方说,

$VAR1 = {
          'location' => 'valueA,valueB',
          'department' => 'value1,value2'
        };

谢谢.



1> Nikhil..:

干得好:

my %hash;
while ()
{
   chomp;
   my ($key, $val) = split /=/;
   $hash{$key} .= exists $hash{$key} ? ",$val" : $val;
}

这将遍历在'='符号上拆分的每一行,并添加一个条目或附加到哈希表中的现有条目.



2> Schwern..:

如果您可以控制数据文件,请考虑从自定义格式切换到YAML之类的格式.这为您提供了大量的开箱即用功能,而不必越来越多地破解您的自定义格式.特别是,创建列表的多个键是不明显的.YAML的做法更加清晰.

name:       Wally Jones
department: [foo, bar]
location:   [baz, biff]

另请注意,YAML允许您对键/值对进行雕刻,以便它们排列以便于阅读.

解析它的代码是由一个模块完成的,YAML :: XS是最好的.

use File::Slurp;
use YAML::XS;
use Data::Dumper;

print Dumper Load scalar read_file(shift);

数据结构如下所示:

$VAR1 = {
          'department' => [
                            'foo',
                            'bar'
                          ],
          'location' => [
                          'baz',
                          'biff'
                        ],
          'name' => 'Wally Jones'
        };

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有