序列化(Serialization)通常用于实现将数据和对象存储到一个文件中。生成的字节数据可以重复使用,来生成已保存对象的副本。 哈希(hash)、数组(array)、标量(scalaer)可以通过下面的方式进行序列化: #!/usr/bin/perl ############################################## # (c) 2011 LoRui(i@lorui.com, www.lorui.com) # ############################################## use strict; use warnings; use Storable; #定义一个Hash,用于测试序列化 my %student = ( 'No' => '00342001010103037', 'Name' => 'LoRui' ); store \%student, 'student.lorui'; #序列化,将其保存 print "==== student ====\n"; &dumper(\%student); #输出定义的Hash my %person = %{retrieve 'student.lorui'}; #读取并反序列化,并将取赋给一个变量 print "\n==== person ====\n"; &dumper(\%person); #输出反序列化Hash sub dumper { my $hash_ref = shift; while(my($key, $val) = each(%$hash_ref)) { print "$key => $val\n"; } } 输出结果: ==== student ==== No => 00342001010103037 Name => LoRui ==== person ==== No => 00342001010103037 Name => LoRui 序列化一个对象(object),可参考以下方法: #!/usr/bin/perl ############################################## # (c) 2011 LoRui(i@lorui.com, www.lorui.com) # ############################################## use strict; use warnings; use Storable; package LoRui; sub new { my $class = shift; my $this = {}; bless $this, $class; return $this; } sub set_value { my ($this, $key, $val) = @_; $this->{$key} = $val; } sub get_value { my ($this, $key) = @_; return $this->{$key} || 'Undefined'; } sub show { my $this = shift; while(my ($key, $val) = each(%$this)) { print "$key => $val\n"; } } package main; my $data_file = 'serialized_obj.lorui'; my $obj = LoRui->new; $obj->set_value('from', 'LoRui.com'); store $obj, $data_file; print "### OBJ ###\n"; $obj->show; print $obj->get_value('to'), "\n"; my $obj_r = retrieve $data_file; print "\n### OBJ_R ###\n"; $obj_r->show; print $obj->get_value('to'), "\n"; 输出结果: ### OBJ ### from => LoRui.com Undefined ### OBJ_R ### from => LoRui.com Undefined |
|