[英]How do I serialize an array of array-references in Perl?
有很多模塊可以為Perl序列化數據,我不知道選擇哪一個。
我有以下數據需要序列化為字符串,所以我可以把它放在數據庫中:
my @categories = (
["Education", "Higher Education", "Colleges"],
["Schooling", "Colleges"]
);
我怎么能把它變成文本,然后當我需要它時,轉回一個數組引用數組?
我投票支持JSON(或另一個答案中提到的Data::Serializer
,與JSON
一起使用)。
JSON
模塊快速而有效(如果您從cpan安裝JSON :: XS,它將為您編譯C版本,並use JSON
將自動使用它)。
它適用於Perl數據結構,標准化,並且Javascript語法與Perl語法非常相似。 您可以使用JSON
模塊設置選項以提高人類可讀性(換行等)
我也用過Storable
。 我不喜歡它 - 界面很奇怪,輸出是荒謬的,它是一種專有格式。 Data::Dumper
快速且可讀性很強,但實際上是單向的( eval
它有點hackish),而且它只是Perl。 我也推出了自己的產品。 最后,我總結說JSON是最好的,快速,靈活,強大。
您可以使用Data::Serializer
:
你可以自己滾動,但你必須擔心棘手的問題,如轉義引號和反斜杠或你選擇的分隔符。
下面的程序顯示了如何使用標准Perl模塊Data :: Dumper和Storable以適合存儲在數據庫中的方式序列化和反序列化數據。
#! /usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
use Storable qw/ nfreeze thaw /;
use Test::More tests => 2;
my @categories = (
["Education", "Higher Education", "Colleges"],
["Schooling", "Colleges"]
);
{
local $Data::Dumper::Indent = 0;
local $Data::Dumper::Terse = 1;
my $serialized = Dumper \@categories;
print $serialized, "\n";
my $restored = eval($serialized) || die "deserialization failed: $@";
is_deeply $restored, \@categories;
}
{
my $serialized = unpack "H*", nfreeze \@categories;
print $serialized, "\n";
my $restored = thaw pack "H*", $serialized;
die "deserialization failed: $@" unless defined $restored;
is_deeply $restored, \@categories;
}
Data :: Dumper具有人類可讀的良好屬性,但是要求eval
反序列化的嚴重不利因素。 可儲存很好,緊湊但不透明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.