]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - lib/Variable/Magic.pm
This is 0.45
[perl/modules/Variable-Magic.git] / lib / Variable / Magic.pm
index 5c049322588e47cd50db032e14a8a01083420c68..1716f426d5863e1266a2be241a6404e29c430a1d 100644 (file)
@@ -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<MGf_LOCAL> is true.
 
 =back
 
-The following actions only apply to hashes and are available iff C<VMG_UVAR> is true.
+The following actions only apply to hashes and are available iff L</VMG_UVAR> is true.
 They are referred to as C<uvar> 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<cast>
@@ -373,6 +381,8 @@ Evaluates to true iff the 'local' magic is available.
 =head2 C<VMG_UVAR>
 
 When this constant is true, you can use the C<fetch,store,exists,delete> 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<VMG_COMPAT_ARRAY_PUSH_NOLEN>
 
@@ -592,10 +602,15 @@ The only way to address this would be to return a reference.
 
 If you define a wizard with a C<free> 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<perl> 5.10.0 (see L</VMG_UVAR>)
+
 =head1 DEPENDENCIES
 
 L<perl> 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<Carp> (standard since perl 5), L<XSLoader> (standard since perl 5.006).
 
 Copy tests need L<Tie::Array> (standard since perl 5.005) and L<Tie::Hash> (since 5.002).