[英]How can I store simple hash in perl using data dumper
%hash = ('abc' => 123, 'def' => [4,5,6]);
如何使用 Perl 中的數據轉儲器將 hash 以上存儲在文件中
文件只能包含字節序列,因此您需要以某種方式將數據結構轉換為字節序列。 這個過程稱為序列化。
您可以使用的可能性是無窮無盡的,但有一些值得一提:
正如你所說,還有 Data::Dumper。
use Data::Dumper qw( );
sub serialize {
my ($x) = @_;
local $Data::Dumper::Purity = 1; # Required for some data structures.
local $Data::Dumper::Useqq = 1; # Optional. Limits output to ASCII.
local $Data::Dumper::Sortkeys = 1; # Optional. Makes revision control easier.
return Data::Dumper->Dump([$x], ["x"]);
}
print($fh serialize($x));
Data::Dumper 不是一個特別好的選擇,因為沒有現有的模塊可以安全地反序列化 Perl [1]中的結構,而且 Perl 之外的支持更少。
sub deserialize {
my ($s) = @_;
my $x;
eval($s); # XXX Unsafe!
die($@) if $@;
return $x;
}
Purity
設置為0
),那么您可以使用Data::Undump安全地反序列化。 但是為什么不直接使用 JSON?!use Data::Dumper open (FL, ">", "file.txt") or die "Cant open file $! "; print FL Dumper \%hash; close FL;
“如何使用 Perl 中的數據轉儲器將 hash 存儲在文件中”
將其存儲為 JSON 以便(幾乎)任何東西都可以讀取它,使用配置為打印 JSON 的Data::Dumper
。
use strict;
use warnings;
use Data::Dumper;
local $Data::Dumper::Pair = ' : ';
local $Data::Dumper::Quotekeys = 1;
local $Data::Dumper::Useqq = 1;
local $Data::Dumper::Terse = 1;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
open my $file, '>', 'foo.json' or die $!;
print $file Dumper \%hash;
Output:
$ cat foo.json
{
"def" : [
4,
5,
6
],
"abc" : 123
}
(注意:我當然寧願為此使用專用的 JSON 處理模塊,但你問了......)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.