来自文本文件的Perl哈希

时间:2013-11-21 05:09:52

标签: perl text hash

是Perl的新手并尝试从文本文件创建哈希。我有一个代码外部的文本文件,可供其他人编辑。假设他们应该熟悉Perl并且知道在哪里编辑。文本文件基本上包含几个哈希散列,包括正确的语法,缩进等,就像普通的Perl代码一样。键和值会有所不同,但散列的所有散列都具有相同的深度。

问题:如何将此文件读入我的代码并能够使用这些哈希值?

在学习中,我尝试了'打开(FILE)'然后尝试'while',但是将每行抛入@rray并不会保留散列。或者我是否必须使用每一行在我的代码中创建几个散列哈希?

Thnx提供任何帮助。

3 个答案:

答案 0 :(得分:2)

这很简单:

 my $nested_hash = do "your_file.txt";

所以如果your_file.txt包含类似的内容:

{
  a => 1,
  b => [1,2,3],
  c => {
    c1 => 42
    c3 => {
      c11 => 21
    }
  }
}

然后$nested_hash可以像:

一样使用
$nested_hash->{a}   # equals 1
$nested_hash->{b}   # the array reference [1,2,3]

$nested_hash->{c}->{c1} # equals 42

您的外部文本文件中也可能有多个数据结构;只需将它们定义为由,分隔的列表。

your_file.txt

{
  a => 1,
  b => [1,2,3],
},
{
  c => 3,
  d => 4,
}

然后从脚本中读取它们,使用列表上下文:

my @nested_hashes = do "your_file.txt";

所以

$nested_hashes[0]->{a}  # gives you 1
$nested_hashes[1]->{c}  # gives you 3

答案 1 :(得分:0)

所以你有一个哈希文件,我们称之为bar.pm:

our $hash = {
      a => 1,
      b => [1,2,3],
    },
    {
      c => 3,
      d => 4,
    } ; 

our $hosh = {
      v => 1,
      w => [1,2,3],
    },
    {
      x => 3,
      y => 4,
    } ;

1;

现在,另一个脚本中的代码如下:

use strict;
use warnings ;
use Data::Dumper ; 

require('bar.pm') ;
our $hash ; 
our $hosh ;
print Dumper $hash ; 
print Dumper $hosh ;

您想要的是什么,print Dumper显示

你仍然需要知道bar.pm文件中定义了哪些哈希值,因为你需要our将它们放入代码中。为了避免这种情况,您可以在bar.pm中定义哈希的主散列。

我可能永远不会这样做,只因为:

  

“假设他们应该熟悉Perl并愿意   知道在哪里编辑“

似乎有些危险。 CPAN上有许多配置模块可能会好得多。

答案 2 :(得分:0)

使用Data :: Dumper。

首先,创建一个数据结构并将其保存到文件中。

use Data::Dumper;

my $hash = {
    'k1' => 'v1',
    'k2' => 2,
};

open my $output, '>', 'data' or die $!;
print $output Dumper $hash;

文件data应如下所示:

$VAR1 = {
          'k2' => 2,
          'k1' => 'v1'
        };

它可以被人类编辑。

现在,如果您想将数据恢复到您的程序(例如在人工编辑之后):

my $hash = do 'data';