Add simple caches for ::viacode() and ::vianame().
[p5sagit/p5-mst-13.2.git] / ext / Storable / Storable.pm
CommitLineData
6e0ac6f5 1;# $Id: Storable.pm,v 1.0.1.12 2001/08/28 21:51:51 ram Exp $
7a6a85bf 2;#
3;# Copyright (c) 1995-2000, Raphael Manfredi
4;#
9e21b3d0 5;# You may redistribute only under the same terms as Perl 5, as specified
6;# in the README file that comes with the distribution.
7a6a85bf 7;#
8;# $Log: Storable.pm,v $
6e0ac6f5 9;# Revision 1.0.1.12 2001/08/28 21:51:51 ram
10;# patch13: fixed truncation race with lock_retrieve() in lock_store()
11;#
e993d95c 12;# Revision 1.0.1.11 2001/07/01 11:22:14 ram
13;# patch12: systematically use "=over 4" for POD linters
14;# patch12: updated version number
15;#
8be2b38b 16;# Revision 1.0.1.10 2001/03/15 00:20:25 ram
17;# patch11: updated version number
18;#
19;# Revision 1.0.1.9 2001/02/17 12:37:32 ram
20;# patch10: forgot to increase version number at previous patch
21;#
b12202d0 22;# Revision 1.0.1.8 2001/02/17 12:24:37 ram
23;# patch8: fixed incorrect error message
24;#
862382c7 25;# Revision 1.0.1.7 2001/01/03 09:39:02 ram
26;# patch7: added CAN_FLOCK to determine whether we can flock() or not
27;#
90826881 28;# Revision 1.0.1.6 2000/11/05 17:20:25 ram
29;# patch6: increased version number
30;#
212e9bde 31;# Revision 1.0.1.5 2000/10/26 17:10:18 ram
32;# patch5: documented that store() and retrieve() can return undef
33;# patch5: added paragraph explaining the auto require for thaw hooks
34;#
35;# Revision 1.0.1.4 2000/10/23 18:02:57 ram
36;# patch4: protected calls to flock() for dos platform
37;# patch4: added logcarp emulation if they don't have Log::Agent
38;#
8be2b38b 39;# Revision 1.0.1.3 2000/09/29 19:49:01 ram
40;# patch3: updated version number
41;#
42;# Revision 1.0.1.2 2000/09/28 21:42:51 ram
43;# patch2: added lock_store lock_nstore lock_retrieve
44;#
45;# Revision 1.0.1.1 2000/09/17 16:46:21 ram
46;# patch1: documented that doubles are stringified by nstore()
47;# patch1: added Salvador Ortiz Garcia in CREDITS section
48;#
9e21b3d0 49;# Revision 1.0 2000/09/01 19:40:41 ram
50;# Baseline for first official release.
7a6a85bf 51;#
52
53require DynaLoader;
54require Exporter;
55package Storable; @ISA = qw(Exporter DynaLoader);
56
57@EXPORT = qw(store retrieve);
58@EXPORT_OK = qw(
9e21b3d0 59 nstore store_fd nstore_fd fd_retrieve
7a6a85bf 60 freeze nfreeze thaw
61 dclone
9e21b3d0 62 retrieve_fd
dd19458b 63 lock_store lock_nstore lock_retrieve
7a6a85bf 64);
65
66use AutoLoader;
67use vars qw($forgive_me $VERSION);
68
6e0ac6f5 69$VERSION = '1.013';
7a6a85bf 70*AUTOLOAD = \&AutoLoader::AUTOLOAD; # Grrr...
71
72#
73# Use of Log::Agent is optional
74#
75
76eval "use Log::Agent";
77
78unless (defined @Log::Agent::EXPORT) {
79 eval q{
80 sub logcroak {
81 require Carp;
82 Carp::croak(@_);
83 }
b29b780f 84 sub logcarp {
85 require Carp;
86 Carp::carp(@_);
87 }
7a6a85bf 88 };
89}
90
dd19458b 91#
92# They might miss :flock in Fcntl
93#
94
95BEGIN {
96 require Fcntl;
97 if (exists $Fcntl::EXPORT_TAGS{'flock'}) {
98 Fcntl->import(':flock');
99 } else {
100 eval q{
101 sub LOCK_SH () {1}
102 sub LOCK_EX () {2}
103 };
104 }
105}
106
7a6a85bf 107sub logcroak;
b29b780f 108sub logcarp;
7a6a85bf 109
9e21b3d0 110sub retrieve_fd { &fd_retrieve } # Backward compatibility
cb3d9de5 111
862382c7 112#
113# Determine whether locking is possible, but only when needed.
114#
115
116my $CAN_FLOCK;
117
118sub CAN_FLOCK {
119 return $CAN_FLOCK if defined $CAN_FLOCK;
120 require Config; import Config;
121 return $CAN_FLOCK =
122 $Config{'d_flock'} ||
123 $Config{'d_fcntl_can_lock'} ||
124 $Config{'d_lockf'};
125}
126
7a6a85bf 127bootstrap Storable;
1281;
129__END__
130
131#
132# store
133#
134# Store target object hierarchy, identified by a reference to its root.
135# The stored object tree may later be retrieved to memory via retrieve.
136# Returns undef if an I/O error occurred, in which case the file is
137# removed.
138#
139sub store {
dd19458b 140 return _store(\&pstore, @_, 0);
7a6a85bf 141}
142
143#
144# nstore
145#
146# Same as store, but in network order.
147#
148sub nstore {
dd19458b 149 return _store(\&net_pstore, @_, 0);
150}
151
152#
153# lock_store
154#
155# Same as store, but flock the file first (advisory locking).
156#
157sub lock_store {
158 return _store(\&pstore, @_, 1);
159}
160
161#
162# lock_nstore
163#
164# Same as nstore, but flock the file first (advisory locking).
165#
166sub lock_nstore {
167 return _store(\&net_pstore, @_, 1);
7a6a85bf 168}
169
170# Internal store to file routine
171sub _store {
172 my $xsptr = shift;
173 my $self = shift;
dd19458b 174 my ($file, $use_locking) = @_;
7a6a85bf 175 logcroak "not a reference" unless ref($self);
b12202d0 176 logcroak "wrong argument number" unless @_ == 2; # No @foo in arglist
7a6a85bf 177 local *FILE;
dd19458b 178 if ($use_locking) {
6e0ac6f5 179 open(FILE, ">>$file") || logcroak "can't write into $file: $!";
862382c7 180 unless (&CAN_FLOCK) {
b29b780f 181 logcarp "Storable::lock_store: fcntl/flock emulation broken on $^O";
182 return undef;
f567092b 183 }
dd19458b 184 flock(FILE, LOCK_EX) ||
185 logcroak "can't get exclusive lock on $file: $!";
186 truncate FILE, 0;
187 # Unlocking will happen when FILE is closed
6e0ac6f5 188 } else {
189 open(FILE, ">$file") || logcroak "can't create $file: $!";
dd19458b 190 }
6e0ac6f5 191 binmode FILE; # Archaic systems...
7a6a85bf 192 my $da = $@; # Don't mess if called from exception handler
193 my $ret;
194 # Call C routine nstore or pstore, depending on network order
195 eval { $ret = &$xsptr(*FILE, $self) };
196 close(FILE) or $ret = undef;
197 unlink($file) or warn "Can't unlink $file: $!\n" if $@ || !defined $ret;
198 logcroak $@ if $@ =~ s/\.?\n$/,/;
199 $@ = $da;
200 return $ret ? $ret : undef;
201}
202
203#
204# store_fd
205#
206# Same as store, but perform on an already opened file descriptor instead.
207# Returns undef if an I/O error occurred.
208#
209sub store_fd {
210 return _store_fd(\&pstore, @_);
211}
212
213#
214# nstore_fd
215#
216# Same as store_fd, but in network order.
217#
218sub nstore_fd {
219 my ($self, $file) = @_;
220 return _store_fd(\&net_pstore, @_);
221}
222
223# Internal store routine on opened file descriptor
224sub _store_fd {
225 my $xsptr = shift;
226 my $self = shift;
227 my ($file) = @_;
228 logcroak "not a reference" unless ref($self);
229 logcroak "too many arguments" unless @_ == 1; # No @foo in arglist
230 my $fd = fileno($file);
231 logcroak "not a valid file descriptor" unless defined $fd;
232 my $da = $@; # Don't mess if called from exception handler
233 my $ret;
234 # Call C routine nstore or pstore, depending on network order
235 eval { $ret = &$xsptr($file, $self) };
236 logcroak $@ if $@ =~ s/\.?\n$/,/;
237 $@ = $da;
238 return $ret ? $ret : undef;
239}
240
241#
242# freeze
243#
244# Store oject and its hierarchy in memory and return a scalar
245# containing the result.
246#
247sub freeze {
248 _freeze(\&mstore, @_);
249}
250
251#
252# nfreeze
253#
254# Same as freeze but in network order.
255#
256sub nfreeze {
257 _freeze(\&net_mstore, @_);
258}
259
260# Internal freeze routine
261sub _freeze {
262 my $xsptr = shift;
263 my $self = shift;
264 logcroak "not a reference" unless ref($self);
265 logcroak "too many arguments" unless @_ == 0; # No @foo in arglist
266 my $da = $@; # Don't mess if called from exception handler
267 my $ret;
268 # Call C routine mstore or net_mstore, depending on network order
269 eval { $ret = &$xsptr($self) };
270 logcroak $@ if $@ =~ s/\.?\n$/,/;
271 $@ = $da;
272 return $ret ? $ret : undef;
273}
274
275#
276# retrieve
277#
278# Retrieve object hierarchy from disk, returning a reference to the root
279# object of that tree.
280#
281sub retrieve {
dd19458b 282 _retrieve($_[0], 0);
283}
284
285#
286# lock_retrieve
287#
288# Same as retrieve, but with advisory locking.
289#
290sub lock_retrieve {
291 _retrieve($_[0], 1);
292}
293
294# Internal retrieve routine
295sub _retrieve {
296 my ($file, $use_locking) = @_;
7a6a85bf 297 local *FILE;
dd19458b 298 open(FILE, $file) || logcroak "can't open $file: $!";
7a6a85bf 299 binmode FILE; # Archaic systems...
300 my $self;
301 my $da = $@; # Could be from exception handler
dd19458b 302 if ($use_locking) {
862382c7 303 unless (&CAN_FLOCK) {
8be2b38b 304 logcarp "Storable::lock_store: fcntl/flock emulation broken on $^O";
b29b780f 305 return undef;
306 }
8be2b38b 307 flock(FILE, LOCK_SH) || logcroak "can't get shared lock on $file: $!";
dd19458b 308 # Unlocking will happen when FILE is closed
309 }
7a6a85bf 310 eval { $self = pretrieve(*FILE) }; # Call C routine
311 close(FILE);
312 logcroak $@ if $@ =~ s/\.?\n$/,/;
313 $@ = $da;
314 return $self;
315}
316
317#
9e21b3d0 318# fd_retrieve
7a6a85bf 319#
320# Same as retrieve, but perform from an already opened file descriptor instead.
321#
9e21b3d0 322sub fd_retrieve {
7a6a85bf 323 my ($file) = @_;
324 my $fd = fileno($file);
325 logcroak "not a valid file descriptor" unless defined $fd;
326 my $self;
327 my $da = $@; # Could be from exception handler
328 eval { $self = pretrieve($file) }; # Call C routine
329 logcroak $@ if $@ =~ s/\.?\n$/,/;
330 $@ = $da;
331 return $self;
332}
333
334#
335# thaw
336#
337# Recreate objects in memory from an existing frozen image created
338# by freeze. If the frozen image passed is undef, return undef.
339#
340sub thaw {
341 my ($frozen) = @_;
342 return undef unless defined $frozen;
343 my $self;
344 my $da = $@; # Could be from exception handler
345 eval { $self = mretrieve($frozen) }; # Call C routine
346 logcroak $@ if $@ =~ s/\.?\n$/,/;
347 $@ = $da;
348 return $self;
349}
350
351=head1 NAME
352
353Storable - persistency for perl data structures
354
355=head1 SYNOPSIS
356
357 use Storable;
358 store \%table, 'file';
359 $hashref = retrieve('file');
360
361 use Storable qw(nstore store_fd nstore_fd freeze thaw dclone);
362
363 # Network order
364 nstore \%table, 'file';
365 $hashref = retrieve('file'); # There is NO nretrieve()
366
367 # Storing to and retrieving from an already opened file
368 store_fd \@array, \*STDOUT;
369 nstore_fd \%table, \*STDOUT;
9e21b3d0 370 $aryref = fd_retrieve(\*SOCKET);
371 $hashref = fd_retrieve(\*SOCKET);
7a6a85bf 372
373 # Serializing to memory
374 $serialized = freeze \%table;
375 %table_clone = %{ thaw($serialized) };
376
377 # Deep (recursive) cloning
378 $cloneref = dclone($ref);
379
dd19458b 380 # Advisory locking
381 use Storable qw(lock_store lock_nstore lock_retrieve)
382 lock_store \%table, 'file';
383 lock_nstore \%table, 'file';
384 $hashref = lock_retrieve('file');
385
7a6a85bf 386=head1 DESCRIPTION
387
388The Storable package brings persistency to your perl data structures
389containing SCALAR, ARRAY, HASH or REF objects, i.e. anything that can be
390convenientely stored to disk and retrieved at a later time.
391
392It can be used in the regular procedural way by calling C<store> with
393a reference to the object to be stored, along with the file name where
394the image should be written.
395The routine returns C<undef> for I/O problems or other internal error,
396a true value otherwise. Serious errors are propagated as a C<die> exception.
397
398To retrieve data stored to disk, use C<retrieve> with a file name,
399and the objects stored into that file are recreated into memory for you,
400a I<reference> to the root object being returned. In case an I/O error
401occurs while reading, C<undef> is returned instead. Other serious
402errors are propagated via C<die>.
403
404Since storage is performed recursively, you might want to stuff references
405to objects that share a lot of common data into a single array or hash
406table, and then store that object. That way, when you retrieve back the
407whole thing, the objects will continue to share what they originally shared.
408
409At the cost of a slight header overhead, you may store to an already
410opened file descriptor using the C<store_fd> routine, and retrieve
9e21b3d0 411from a file via C<fd_retrieve>. Those names aren't imported by default,
7a6a85bf 412so you will have to do that explicitely if you need those routines.
413The file descriptor you supply must be already opened, for read
414if you're going to retrieve and for write if you wish to store.
415
416 store_fd(\%table, *STDOUT) || die "can't store to stdout\n";
9e21b3d0 417 $hashref = fd_retrieve(*STDIN);
7a6a85bf 418
419You can also store data in network order to allow easy sharing across
420multiple platforms, or when storing on a socket known to be remotely
421connected. The routines to call have an initial C<n> prefix for I<network>,
422as in C<nstore> and C<nstore_fd>. At retrieval time, your data will be
423correctly restored so you don't have to know whether you're restoring
dd19458b 424from native or network ordered data. Double values are stored stringified
425to ensure portability as well, at the slight risk of loosing some precision
426in the last decimals.
7a6a85bf 427
9e21b3d0 428When using C<fd_retrieve>, objects are retrieved in sequence, one
7a6a85bf 429object (i.e. one recursive tree) per associated C<store_fd>.
430
431If you're more from the object-oriented camp, you can inherit from
432Storable and directly store your objects by invoking C<store> as
433a method. The fact that the root of the to-be-stored tree is a
434blessed reference (i.e. an object) is special-cased so that the
435retrieve does not provide a reference to that object but rather the
436blessed object reference itself. (Otherwise, you'd get a reference
437to that blessed object).
438
439=head1 MEMORY STORE
440
441The Storable engine can also store data into a Perl scalar instead, to
442later retrieve them. This is mainly used to freeze a complex structure in
443some safe compact memory place (where it can possibly be sent to another
444process via some IPC, since freezing the structure also serializes it in
445effect). Later on, and maybe somewhere else, you can thaw the Perl scalar
446out and recreate the original complex structure in memory.
447
448Surprisingly, the routines to be called are named C<freeze> and C<thaw>.
449If you wish to send out the frozen scalar to another machine, use
450C<nfreeze> instead to get a portable image.
451
452Note that freezing an object structure and immediately thawing it
453actually achieves a deep cloning of that structure:
454
455 dclone(.) = thaw(freeze(.))
456
457Storable provides you with a C<dclone> interface which does not create
458that intermediary scalar but instead freezes the structure in some
459internal memory space and then immediatly thaws it out.
460
dd19458b 461=head1 ADVISORY LOCKING
462
463The C<lock_store> and C<lock_nstore> routine are equivalent to C<store>
464and C<nstore>, only they get an exclusive lock on the file before
465writing. Likewise, C<lock_retrieve> performs as C<retrieve>, but also
466gets a shared lock on the file before reading.
467
468Like with any advisory locking scheme, the protection only works if
469you systematically use C<lock_store> and C<lock_retrieve>. If one
470side of your application uses C<store> whilst the other uses C<lock_retrieve>,
471you will get no protection at all.
472
473The internal advisory locking is implemented using Perl's flock() routine.
474If your system does not support any form of flock(), or if you share
475your files across NFS, you might wish to use other forms of locking by
476using modules like LockFile::Simple which lock a file using a filesystem
477entry, instead of locking the file descriptor.
478
7a6a85bf 479=head1 SPEED
480
481The heart of Storable is written in C for decent speed. Extra low-level
482optimization have been made when manipulating perl internals, to
483sacrifice encapsulation for the benefit of a greater speed.
484
485=head1 CANONICAL REPRESENTATION
486
487Normally Storable stores elements of hashes in the order they are
488stored internally by Perl, i.e. pseudo-randomly. If you set
489C<$Storable::canonical> to some C<TRUE> value, Storable will store
490hashes with the elements sorted by their key. This allows you to
491compare data structures by comparing their frozen representations (or
492even the compressed frozen representations), which can be useful for
493creating lookup tables for complicated queries.
494
495Canonical order does not imply network order, those are two orthogonal
496settings.
497
498=head1 ERROR REPORTING
499
500Storable uses the "exception" paradigm, in that it does not try to workaround
501failures: if something bad happens, an exception is generated from the
502caller's perspective (see L<Carp> and C<croak()>). Use eval {} to trap
503those exceptions.
504
505When Storable croaks, it tries to report the error via the C<logcroak()>
506routine from the C<Log::Agent> package, if it is available.
507
212e9bde 508Normal errors are reported by having store() or retrieve() return C<undef>.
509Such errors are usually I/O errors (or truncated stream errors at retrieval).
510
7a6a85bf 511=head1 WIZARDS ONLY
512
513=head2 Hooks
514
515Any class may define hooks that will be called during the serialization
516and deserialization process on objects that are instances of that class.
517Those hooks can redefine the way serialization is performed (and therefore,
518how the symetrical deserialization should be conducted).
519
520Since we said earlier:
521
522 dclone(.) = thaw(freeze(.))
523
524everything we say about hooks should also hold for deep cloning. However,
525hooks get to know whether the operation is a mere serialization, or a cloning.
526
527Therefore, when serializing hooks are involved,
528
529 dclone(.) <> thaw(freeze(.))
530
531Well, you could keep them in sync, but there's no guarantee it will always
532hold on classes somebody else wrote. Besides, there is little to gain in
533doing so: a serializing hook could only keep one attribute of an object,
534which is probably not what should happen during a deep cloning of that
535same object.
536
537Here is the hooking interface:
538
bbc7dcd2 539=over 4
7a6a85bf 540
541=item C<STORABLE_freeze> I<obj>, I<cloning>
542
543The serializing hook, called on the object during serialization. It can be
544inherited, or defined in the class itself, like any other method.
545
546Arguments: I<obj> is the object to serialize, I<cloning> is a flag indicating
547whether we're in a dclone() or a regular serialization via store() or freeze().
548
549Returned value: A LIST C<($serialized, $ref1, $ref2, ...)> where $serialized
550is the serialized form to be used, and the optional $ref1, $ref2, etc... are
551extra references that you wish to let the Storable engine serialize.
552
553At deserialization time, you will be given back the same LIST, but all the
554extra references will be pointing into the deserialized structure.
555
556The B<first time> the hook is hit in a serialization flow, you may have it
557return an empty list. That will signal the Storable engine to further
558discard that hook for this class and to therefore revert to the default
559serialization of the underlying Perl data. The hook will again be normally
560processed in the next serialization.
561
562Unless you know better, serializing hook should always say:
563
564 sub STORABLE_freeze {
565 my ($self, $cloning) = @_;
566 return if $cloning; # Regular default serialization
567 ....
568 }
569
570in order to keep reasonable dclone() semantics.
571
572=item C<STORABLE_thaw> I<obj>, I<cloning>, I<serialized>, ...
573
574The deserializing hook called on the object during deserialization.
575But wait. If we're deserializing, there's no object yet... right?
576
577Wrong: the Storable engine creates an empty one for you. If you know Eiffel,
578you can view C<STORABLE_thaw> as an alternate creation routine.
579
580This means the hook can be inherited like any other method, and that
581I<obj> is your blessed reference for this particular instance.
582
583The other arguments should look familiar if you know C<STORABLE_freeze>:
584I<cloning> is true when we're part of a deep clone operation, I<serialized>
585is the serialized string you returned to the engine in C<STORABLE_freeze>,
586and there may be an optional list of references, in the same order you gave
587them at serialization time, pointing to the deserialized objects (which
588have been processed courtesy of the Storable engine).
589
212e9bde 590When the Storable engine does not find any C<STORABLE_thaw> hook routine,
591it tries to load the class by requiring the package dynamically (using
592the blessed package name), and then re-attempts the lookup. If at that
593time the hook cannot be located, the engine croaks. Note that this mechanism
594will fail if you define several classes in the same file, but perlmod(1)
595warned you.
596
7a6a85bf 597It is up to you to use these information to populate I<obj> the way you want.
598
599Returned value: none.
600
601=back
602
603=head2 Predicates
604
605Predicates are not exportable. They must be called by explicitely prefixing
606them with the Storable package name.
607
bbc7dcd2 608=over 4
7a6a85bf 609
610=item C<Storable::last_op_in_netorder>
611
612The C<Storable::last_op_in_netorder()> predicate will tell you whether
613network order was used in the last store or retrieve operation. If you
614don't know how to use this, just forget about it.
615
616=item C<Storable::is_storing>
617
618Returns true if within a store operation (via STORABLE_freeze hook).
619
620=item C<Storable::is_retrieving>
621
622Returns true if within a retrieve operation, (via STORABLE_thaw hook).
623
624=back
625
626=head2 Recursion
627
628With hooks comes the ability to recurse back to the Storable engine. Indeed,
629hooks are regular Perl code, and Storable is convenient when it comes to
630serialize and deserialize things, so why not use it to handle the
631serialization string?
632
633There are a few things you need to know however:
634
bbc7dcd2 635=over 4
7a6a85bf 636
637=item *
638
639You can create endless loops if the things you serialize via freeze()
640(for instance) point back to the object we're trying to serialize in the hook.
641
642=item *
643
644Shared references among objects will not stay shared: if we're serializing
645the list of object [A, C] where both object A and C refer to the SAME object
646B, and if there is a serializing hook in A that says freeze(B), then when
647deserializing, we'll get [A', C'] where A' refers to B', but C' refers to D,
648a deep clone of B'. The topology was not preserved.
649
650=back
651
652That's why C<STORABLE_freeze> lets you provide a list of references
653to serialize. The engine guarantees that those will be serialized in the
654same context as the other objects, and therefore that shared objects will
655stay shared.
656
657In the above [A, C] example, the C<STORABLE_freeze> hook could return:
658
659 ("something", $self->{B})
660
661and the B part would be serialized by the engine. In C<STORABLE_thaw>, you
662would get back the reference to the B' object, deserialized for you.
663
664Therefore, recursion should normally be avoided, but is nonetheless supported.
665
666=head2 Deep Cloning
667
668There is a new Clone module available on CPAN which implements deep cloning
669natively, i.e. without freezing to memory and thawing the result. It is
670aimed to replace Storable's dclone() some day. However, it does not currently
671support Storable hooks to redefine the way deep cloning is performed.
672
673=head1 EXAMPLES
674
675Here are some code samples showing a possible usage of Storable:
676
677 use Storable qw(store retrieve freeze thaw dclone);
678
679 %color = ('Blue' => 0.1, 'Red' => 0.8, 'Black' => 0, 'White' => 1);
680
681 store(\%color, '/tmp/colors') or die "Can't store %a in /tmp/colors!\n";
682
683 $colref = retrieve('/tmp/colors');
684 die "Unable to retrieve from /tmp/colors!\n" unless defined $colref;
685 printf "Blue is still %lf\n", $colref->{'Blue'};
686
687 $colref2 = dclone(\%color);
688
689 $str = freeze(\%color);
690 printf "Serialization of %%color is %d bytes long.\n", length($str);
691 $colref3 = thaw($str);
692
693which prints (on my machine):
694
695 Blue is still 0.100000
696 Serialization of %color is 102 bytes long.
697
698=head1 WARNING
699
700If you're using references as keys within your hash tables, you're bound
701to disapointment when retrieving your data. Indeed, Perl stringifies
702references used as hash table keys. If you later wish to access the
703items via another reference stringification (i.e. using the same
704reference that was used for the key originally to record the value into
705the hash table), it will work because both references stringify to the
706same string.
707
708It won't work across a C<store> and C<retrieve> operations however, because
709the addresses in the retrieved objects, which are part of the stringified
710references, will probably differ from the original addresses. The
711topology of your structure is preserved, but not hidden semantics
712like those.
713
714On platforms where it matters, be sure to call C<binmode()> on the
715descriptors that you pass to Storable functions.
716
717Storing data canonically that contains large hashes can be
718significantly slower than storing the same data normally, as
719temprorary arrays to hold the keys for each hash have to be allocated,
720populated, sorted and freed. Some tests have shown a halving of the
721speed of storing -- the exact penalty will depend on the complexity of
722your data. There is no slowdown on retrieval.
723
724=head1 BUGS
725
726You can't store GLOB, CODE, FORMLINE, etc... If you can define
727semantics for those operations, feel free to enhance Storable so that
728it can deal with them.
729
730The store functions will C<croak> if they run into such references
731unless you set C<$Storable::forgive_me> to some C<TRUE> value. In that
732case, the fatal message is turned in a warning and some
733meaningless string is stored instead.
734
735Setting C<$Storable::canonical> may not yield frozen strings that
736compare equal due to possible stringification of numbers. When the
737string version of a scalar exists, it is the form stored, therefore
738if you happen to use your numbers as strings between two freezing
739operations on the same data structures, you will get different
740results.
741
dd19458b 742When storing doubles in network order, their value is stored as text.
743However, you should also not expect non-numeric floating-point values
744such as infinity and "not a number" to pass successfully through a
745nstore()/retrieve() pair.
746
747As Storable neither knows nor cares about character sets (although it
748does know that characters may be more than eight bits wide), any difference
749in the interpretation of character codes between a host and a target
750system is your problem. In particular, if host and target use different
751code points to represent the characters used in the text representation
752of floating-point numbers, you will not be able be able to exchange
753floating-point data, even with nstore().
754
7a6a85bf 755=head1 CREDITS
756
757Thank you to (in chronological order):
758
759 Jarkko Hietaniemi <jhi@iki.fi>
760 Ulrich Pfeifer <pfeifer@charly.informatik.uni-dortmund.de>
761 Benjamin A. Holzman <bah@ecnvantage.com>
762 Andrew Ford <A.Ford@ford-mason.co.uk>
763 Gisle Aas <gisle@aas.no>
764 Jeff Gresham <gresham_jeffrey@jpmorgan.com>
765 Murray Nesbitt <murray@activestate.com>
766 Marc Lehmann <pcg@opengroup.org>
9e21b3d0 767 Justin Banks <justinb@wamnet.com>
768 Jarkko Hietaniemi <jhi@iki.fi> (AGAIN, as perl 5.7.0 Pumpkin!)
dd19458b 769 Salvador Ortiz Garcia <sog@msg.com.mx>
770 Dominic Dunlop <domo@computer.org>
771 Erik Haugan <erik@solbors.no>
7a6a85bf 772
773for their bug reports, suggestions and contributions.
774
775Benjamin Holzman contributed the tied variable support, Andrew Ford
776contributed the canonical order for hashes, and Gisle Aas fixed
777a few misunderstandings of mine regarding the Perl internals,
778and optimized the emission of "tags" in the output streams by
779simply counting the objects instead of tagging them (leading to
780a binary incompatibility for the Storable image starting at version
7810.6--older images are of course still properly understood).
782Murray Nesbitt made Storable thread-safe. Marc Lehmann added overloading
783and reference to tied items support.
784
785=head1 TRANSLATIONS
786
787There is a Japanese translation of this man page available at
788http://member.nifty.ne.jp/hippo2000/perltips/storable.htm ,
789courtesy of Kawai, Takanori <kawai@nippon-rad.co.jp>.
790
791=head1 AUTHOR
792
793Raphael Manfredi F<E<lt>Raphael_Manfredi@pobox.comE<gt>>
794
795=head1 SEE ALSO
796
797Clone(3).
798
799=cut
800