X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FVariable%2FMagic.pm;h=19badb0e5ab9eaf109cf1f15cbd03d31726efe9f;hb=19b708934684141b9dc4b99c8a75165c2d3daabf;hp=2ad1315d77d5e5c112e09f8ca3e867a96b45d9ca;hpb=0552b1e308c11b5488b02b773e6a9529cd729710;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/lib/Variable/Magic.pm b/lib/Variable/Magic.pm index 2ad1315..19badb0 100644 --- a/lib/Variable/Magic.pm +++ b/lib/Variable/Magic.pm @@ -5,8 +5,6 @@ use 5.008; use strict; use warnings; -use Carp qw/croak/; - =head1 NAME Variable::Magic - Associate user-defined magic to variables from Perl. @@ -296,19 +294,32 @@ Here's a simple usage example : =cut sub wizard { - croak 'Wrong number of arguments for wizard()' if @_ % 2; + if (@_ % 2) { + require Carp; + Carp::croak('Wrong number of arguments for 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//; - croak $err; + require Carp; + Carp::croak($err); } - return $ret; + + return $wiz; } =head2 C