是Perl的新手并尝试从文本文件创建哈希。我有一个代码外部的文本文件,可供其他人编辑。假设他们应该熟悉Perl并且知道在哪里编辑。文本文件基本上包含几个哈希散列,包括正确的语法,缩进等,就像普通的Perl代码一样。键和值会有所不同,但散列的所有散列都具有相同的深度。
问题:如何将此文件读入我的代码并能够使用这些哈希值?
在学习中,我尝试了'打开(FILE)'然后尝试'while',但是将每行抛入@rray并不会保留散列。或者我是否必须使用每一行在我的代码中创建几个散列哈希?
Thnx提供任何帮助。
杆
答案 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';