diff options
-rw-r--r-- | gv.c | 4 | ||||
-rw-r--r-- | t/op/magic.t | 12 |
2 files changed, 14 insertions, 2 deletions
@@ -1892,7 +1892,11 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, /* magicalization must be done before require_tie_mod is called */ if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) + { + if (addmg) (void)hv_store(stash,name,len,(SV *)gv,0); + addmg = 0; require_tie_mod(gv, "!", newSVpvs("Errno"), "TIEHASH", 1); + } break; case '-': /* $- */ diff --git a/t/op/magic.t b/t/op/magic.t index 6ddf2d8071..494847f7f1 100644 --- a/t/op/magic.t +++ b/t/op/magic.t @@ -5,7 +5,7 @@ BEGIN { chdir 't' if -d 't'; @INC = '../lib'; require './test.pl'; - plan (tests => 153); + plan (tests => 154); } # Test that defined() returns true for magic variables created on the fly, @@ -416,7 +416,7 @@ SKIP: { } SKIP: { - skip_if_miniperl("miniperl can't rely on loading %Errno", 1); + skip_if_miniperl("miniperl can't rely on loading %Errno", 2); # Make sure that Errno loading doesn't clobber $! undef %Errno::; @@ -425,6 +425,14 @@ SKIP: { open(FOO, "nonesuch"); # Generate ENOENT my %errs = %{"!"}; # Cause Errno.pm to be loaded at run-time ok ${"!"}{ENOENT}; + + # Make sure defined(*{"!"}) before %! does not stop %! from working + is + runperl( + prog => 'BEGIN { defined *{q-!-} } print qq-ok\n- if tied %!', + ), + "ok\n", + 'defined *{"!"} does not stop %! from working'; } # Check that we don't auto-load packages |