diff options
author | Slaven Rezic <slaven@rezic.de> | 2002-10-02 12:21:37 +0200 |
---|---|---|
committer | Abhijit Menon-Sen <ams@wiw.org> | 2002-10-03 02:12:27 +0000 |
commit | 7d408a6b399427bd1a285f24f65ca3e0a1360b9b (patch) | |
tree | 67f24c9ab3c8ce20ef831b21e43382ff39ee8653 /ext/Storable/Storable.pm | |
parent | d31fc31a9b68ee8f42151f9e602f55e4d266eb36 (diff) | |
download | perl-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.pm | 29 |
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 |