summaryrefslogtreecommitdiff
path: root/ext/Storable/Storable.pm
diff options
context:
space:
mode:
authorSlaven Rezic <slaven@rezic.de>2002-10-02 12:21:37 +0200
committerAbhijit Menon-Sen <ams@wiw.org>2002-10-03 02:12:27 +0000
commit7d408a6b399427bd1a285f24f65ca3e0a1360b9b (patch)
tree67f24c9ab3c8ce20ef831b21e43382ff39ee8653 /ext/Storable/Storable.pm
parentd31fc31a9b68ee8f42151f9e602f55e4d266eb36 (diff)
downloadperl-7d408a6b399427bd1a285f24f65ca3e0a1360b9b.tar.gz
Storable and code serialization: documentation
Message-Id: <200210020821.g928Lb2i003767@vran.herceg.de> p4raw-id: //depot/perl@17969
Diffstat (limited to 'ext/Storable/Storable.pm')
-rw-r--r--ext/Storable/Storable.pm29
1 files changed, 28 insertions, 1 deletions
diff --git a/ext/Storable/Storable.pm b/ext/Storable/Storable.pm
index 8346fdafc1..4fba6b1462 100644
--- a/ext/Storable/Storable.pm
+++ b/ext/Storable/Storable.pm
@@ -21,7 +21,7 @@ package Storable; @ISA = qw(Exporter DynaLoader);
use AutoLoader;
use vars qw($canonical $forgive_me $VERSION);
-$VERSION = '2.04';
+$VERSION = '2.05';
*AUTOLOAD = \&AutoLoader::AUTOLOAD; # Grrr...
#
@@ -509,6 +509,18 @@ creating lookup tables for complicated queries.
Canonical order does not imply network order; those are two orthogonal
settings.
+=head1 CODE REFERENCES
+
+Since Storable version 2.05, CODE references may be serialized with
+the help of L<B::Deparse>. To enable this feature, set
+C<$Storable::Deparse> to a true value. To enable deserializazion,
+C<$Storable::Eval> should be set to a true value. Be aware that
+deserialization is done through C<eval>, which is dangerous if the
+Storable file contains malicious data. You can set C<$Storable::Eval>
+to a subroutine reference which would be used instead of C<eval>. See
+below for an example using a L<Safe> compartment for deserialization
+of CODE references.
+
=head1 FORWARD COMPATIBILITY
This release of Storable can be used on a newer version of Perl to
@@ -784,6 +796,21 @@ which prints (on my machine):
Blue is still 0.100000
Serialization of %color is 102 bytes long.
+Serialization of CODE references and deserialization in a safe
+compartment:
+
+ use Storable qw(freeze thaw);
+ use Safe;
+ use strict;
+ my $safe = new Safe;
+ # permitting the "require" opcode is necessary when using "use strict"
+ $safe->permit(qw(:default require));
+ local $Storable::Deparse = 1;
+ local $Storable::Eval = sub { $safe->reval($_[0]) };
+ my $serialized = freeze(sub { print "42\n" });
+ my $code = thaw($serialized);
+ $code->(); # prints 42
+
=head1 WARNING
If you're using references as keys within your hash tables, you're bound