diff --git a/gv.c b/gv.c index e4bd3943c189..65c29717c03e 100644 --- a/gv.c +++ b/gv.c @@ -121,9 +121,9 @@ Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen, #else sv_setpvn(GvSV(gv), name, namelen); #endif - if (PERLDB_LINE || PERLDB_SAVESRC) - hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile); } + if ((PERLDB_LINE || PERLDB_SAVESRC) && !GvAV(gv)) + hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile); if (tmpbuf != smallbuf) Safefree(tmpbuf); return gv; diff --git a/pod/perldelta.pod b/pod/perldelta.pod index aa23407740d0..1d2609542f58 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -387,6 +387,13 @@ Parsing Perl code (either with string C or by loading modules) from within a C block no longer causes the interpreter to crash L<[perl #70614]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=70614>. +=item * + +When C<-d> is used on the shebang (C<#!>) line, the debugger now has access +to the lines of the main program. In the past, this sometimes worked and +sometimes did not, depending on what order things happened to be arranged +in memory. + =back =head1 Known Problems diff --git a/t/run/switchd.t b/t/run/switchd.t index 921b966073cc..f937093809a6 100644 --- a/t/run/switchd.t +++ b/t/run/switchd.t @@ -9,7 +9,7 @@ BEGIN { require "./test.pl"; } # This test depends on t/lib/Devel/switchd.pm. -plan(tests => 2); +plan(tests => 3); my $r; @@ -44,3 +44,16 @@ __SWDTEST__ like($r, qr/^sub;import;DB;sub;DB;DB;DB;sub;DB;sub;DB;sub;DB;$/); } +# [perl #71806] +cmp_ok( + runperl( # less is useful for something :-) + switches => [ '"-Mless ++INC->{q-Devel/_.pm-}"' ], + progs => [ + '#!perl -d:_', + 'sub DB::DB{} print scalar @{q/_', + 0, + 'The debugger can see the lines of the main program under #!perl -d', +);