X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FVariable%2FMagic.pm;h=1716f426d5863e1266a2be241a6404e29c430a1d;hb=2d69d033c7c2942a94751972e9f482de7c3482be;hp=5c049322588e47cd50db032e14a8a01083420c68;hpb=7ec09aef1ade5d56c2a436093a35447035705e22;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/lib/Variable/Magic.pm b/lib/Variable/Magic.pm index 5c04932..1716f42 100644 --- a/lib/Variable/Magic.pm +++ b/lib/Variable/Magic.pm @@ -11,13 +11,13 @@ Variable::Magic - Associate user-defined magic to variables from Perl. =head1 VERSION -Version 0.43 +Version 0.45 =cut our $VERSION; BEGIN { - $VERSION = '0.43'; + $VERSION = '0.45'; } =head1 SYNOPSIS @@ -159,7 +159,7 @@ It is available on your perl iff C is true. =back -The following actions only apply to hashes and are available iff C is true. +The following actions only apply to hashes and are available iff L is true. They are referred to as C magics. =over 4 @@ -300,18 +300,26 @@ sub wizard { } my %opts = @_; + my @keys = qw/data op_info get set len clear free/; push @keys, 'copy' if MGf_COPY; push @keys, 'dup' if MGf_DUP; push @keys, 'local' if MGf_LOCAL; push @keys, qw/fetch store exists delete copy_key/ if VMG_UVAR; - my $ret = eval { _wizard(map $opts{$_}, @keys) }; - if (my $err = $@) { + + my ($wiz, $err); + { + local $@; + $wiz = eval { _wizard(map $opts{$_}, @keys) }; + $err = $@; + } + if ($err) { $err =~ s/\sat\s+.*?\n//; require Carp; Carp::croak($err); } - return $ret; + + return $wiz; } =head2 C @@ -373,6 +381,8 @@ Evaluates to true iff the 'local' magic is available. =head2 C When this constant is true, you can use the C callbacks on hashes. +Initial VMG_UVAR capability was introduced in perl 5.9.5, with a fully functional implementation +shipped with perl 5.10.0. =head2 C @@ -592,10 +602,15 @@ The only way to address this would be to return a reference. If you define a wizard with a C callback and cast it on itself, this destructor won't be called because the wizard will be destroyed first. +In order to define magic on hash members, you need at least L 5.10.0 (see L) + =head1 DEPENDENCIES L 5.8. +A C compiler. +This module may happen to build with a C++ compiler as well, but don't rely on it, as no guarantee is made in this regard. + L (standard since perl 5), L (standard since perl 5.006). Copy tests need L (standard since perl 5.005) and L (since 5.002).