我是一个noob.I需要有关数据应该如何保存,并在perl的阅读一些基本知识。 说来保存的哈希和阵列。 什么格式的文件(扩展名),应使用? 文本? 到目前为止,我只能保存所有东西串print FILE %hash
和阅读他们回来作为字符串print <FILE>
我应该怎么做,如果我需要我的散列函数和数组输入从文件。 如何把他们带回哈希和数组?
Answer 1:
你要找的数据序列化 。 流行的选择是稳健的Sereal , JSON :: XS和YAML :: XS 。 鲜为人知的格式有: ASN.1 , 阿夫罗 , BERT , BSON , CBOR , JSYNC , MessagePack , 协议缓冲区 , 节俭 。
其他经常提到的选择是可存储和数据::自卸车 (或类似)/ eval
,但我不能建议他们,因为可存储的格式是Perl版本依赖性, eval
是不安全的,因为它执行任意代码。 截至2012年,解析反部分数据:: Undump没有进展很远呢。 我也不能推荐使用XML,因为它不映射Perl数据类型好,且存在多个相互竞争的/不兼容的架构如何将XML和数据之间的转换。
代码示例(测试):
use JSON::XS qw(encode_json decode_json);
use File::Slurp qw(read_file write_file);
my %hash;
{
my $json = encode_json \%hash;
write_file('dump.json', { binmode => ':raw' }, $json);
}
{
my $json = read_file('dump.json', { binmode => ':raw' });
%hash = %{ decode_json $json };
}
use YAML::XS qw(Load Dump);
use File::Slurp qw(read_file write_file);
my %hash;
{
my $yaml = Dump \%hash;
write_file('dump.yml', { binmode => ':raw' }, $yaml);
}
{
my $yaml = read_file('dump.yml', { binmode => ':raw' });
%hash = %{ Load $yaml };
}
从这里开始下一步了为对象持久性 。
另请阅读: 串行器为Perl:何时使用什么
Answer 2:
Perlmonks有系列化两个很好的讨论。
- 如何保存和重新加载我的散列
- 我怎么可以想像我的复杂的数据结构?
Answer 3:
这真的取决于你想如何存储在文件中的数据。 我会尝试写一些基本的Perl代码,使您能够读取文件到一个数组,或回写的散列到一个文件中。
#Load a file into a hash.
#My Text file has the following format.
#field1=value1
#field2=value2
#<FILE1> is an opens a sample txt file in read-only mode.
my %hash;
while (<FILE1>)
{
chomp;
my ($key, $val) = split /=/;
$hash{$key} .= exists $hash{$key} ? ",$val" : $val;
}
Answer 4:
如果你新我只是建议作出的字符串数组从/哈希与join()方法,他们用“打印”写它,然后阅读和使用分裂()再次进行数组/哈希值。 这将是如Perl教学课本例子更简单的方法。
文章来源: Store and read hash and array in files in Perl