push @cbs, 'dup' if MGf_DUP;
push @cbs, 'local' if MGf_LOCAL;
push @cbs, qw/fetch store exists delete/ if VMG_UVAR;
- return _wizard(map $opts{$_}, @cbs);
+ my $ret = eval { _wizard(map $opts{$_}, @cbs) };
+ if (my $err = $@) {
+ $err =~ s/\sat\s+.*?\n//;
+ croak $err;
+ }
+ return $ret;
}
=head2 C<gensig>
for (0 .. 20) {
next if $_ == $args;
eval { Variable::Magic::_wizard(('hlagh') x $_) };
- like($@, qr/Wrong\s+number\s+of\s+arguments/, '_wizard called directly with a wrong number of arguments croaks');
+ like($@, qr/Wrong\s+number\s+of\s+arguments\s+at\s+\Q$0\E/, '_wizard called directly with a wrong number of arguments croaks');
}
for (0 .. 3) {
eval { wizard(('dong') x (2 * $_ + 1)) };
- like($@, qr/Wrong\s+number\s+of\s+arguments\s+for\s+wizard\(\)/, 'wizard called with an odd number of arguments croaks');
+ like($@, qr/Wrong\s+number\s+of\s+arguments\s+for\s+&?wizard\(\)\s+at\s+\Q$0\E/, 'wizard called with an odd number of arguments croaks');
}
my $sig = gensig;
is($res, undef, 're-dispell from wrong sig doesn\'t return anything');
$res = eval { dispell $a, undef };
-like($@, qr/Invalid\s+wizard\s+object/, 're-dispell from undef croaks');
+like($@, qr/Invalid\s+wizard\s+object\s+at\s+\Q$0\E/, 're-dispell from undef croaks');
is($res, undef, 're-dispell from undef doesn\'t return anything');
$res = eval { dispell $a, $sig };
is($res, undef, 'cast from obsolete signature returns undef');
$res = eval { cast $c, undef };
-like($@, qr/Invalid\s+numeric\s+signature/, 'cast from undef croaks');
+like($@, qr/Invalid\s+numeric\s+signature\s+at\s+\Q$0\E/, 'cast from undef croaks');
is($res, undef, 'cast from undef doesn\'t return anything');
is($sig, getsig $wiz2, 'retrieved wizard signature is correct');
my $wiz3 = eval { wizard sig => [ ] };
- like($@, qr/Invalid\s+numeric\s+signature/, 'non numeric signature croaks');
+ like($@, qr/Invalid\s+numeric\s+signature\s+at\s+\Q$0\E/, 'non numeric signature croaks');
is($wiz3, undef, 'non numeric signature doesn\'t return anything');
my $a = 1;
is($data, undef, 'getdata from invalid sig returns undef');
$data = eval { getdata $a, undef };
-like($@, qr/Invalid\s+wizard\s+object/, 'getdata from undef croaks');
+like($@, qr/Invalid\s+wizard\s+object\s+at\s+\Q$0\E/, 'getdata from undef croaks');
is($data, undef, 'getdata from undef doesn\'t return anything');
$res = eval { dispell $a, $wiz };