diff options
-rw-r--r-- | gv.c | 4 | ||||
-rw-r--r-- | op.c | 3 | ||||
-rw-r--r-- | t/op/mydef.t | 11 |
3 files changed, 12 insertions, 6 deletions
@@ -702,10 +702,6 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) } len = namend - name; - /* $_ should always be in main:: even when our'ed */ - if (*name == '_' && !name[1]) - stash = PL_defstash; - /* No stash in name, so see how we can default */ if (!stash) { @@ -256,7 +256,8 @@ Perl_allocmy(pTHX_ char *name) off = pad_add_name(name, PL_in_my_stash, (PL_in_my == KEY_our - ? (PL_curstash ? PL_curstash : PL_defstash) + /* $_ is always in main::, even with our */ + ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash) : Nullhv ), 0 /* not fake */ diff --git a/t/op/mydef.t b/t/op/mydef.t index f089c31b0c..d2ff35b686 100644 --- a/t/op/mydef.t +++ b/t/op/mydef.t @@ -5,7 +5,7 @@ BEGIN { @INC = '../lib'; } -print "1..66\n"; +print "1..70\n"; my $test = 0; sub ok ($$) { @@ -189,3 +189,12 @@ END { unlink $file; } ok( $x eq "hello\n", 'reading from <$_> works' ); close $_; } + +{ + $fqdb::_ = 'fqdb'; + ok( $fqdb::_ eq 'fqdb', 'fully qualified $_ is not in main' ); + ok( eval q/$fqdb::_/ eq 'fqdb', 'fully qualified, evaled $_ is not in main' ); + package fqdb; + ::ok( $_ ne 'fqdb', 'unqualified $_ is in main' ); + ::ok( q/$_/ ne 'fqdb', 'unqualified, evaled $_ is in main' ); +} |