From: Peter Scott Date: Thu, 13 Sep 2001 15:26:31 +0000 (-0700) Subject: Execute files of debugger commands X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5bad0d9e91a6a5b910e9a6a947ea1d762028bbab;p=p5sagit%2Fp5-mst-13.2.git Execute files of debugger commands Message-Id: <4.3.2.7.2.20010913115845.00b22100@mail.webquarry.com> p4raw-id: //depot/perl@12014 --- diff --git a/lib/perl5db.pl b/lib/perl5db.pl index ab9c48d..6f1b20a 100644 --- a/lib/perl5db.pl +++ b/lib/perl5db.pl @@ -1433,6 +1433,14 @@ EOP } } next CMD; }; + $cmd =~ /^\@\s*(.*\S)/ && do { + if (open my $fh, $1) { + push @cmdfhs, $fh; + } + else { + &warn("Can't execute `$1': $!\n"); + } + next CMD; }; $cmd =~ /^\|\|?\s*[^|]/ && do { if ($pager =~ /^\|/) { open(SAVEOUT,">&STDOUT") || &warn("Can't save STDOUT"); @@ -2105,6 +2113,11 @@ sub readline { } local $frame = 0; local $doret = -2; + while (@cmdfhs) { + my $line = CORE::readline($cmdfhs[-1]); + defined $line ? (print $OUT ">> $line" and return $line) + : close pop @cmdfhs; + } if (ref $OUT and UNIVERSAL::isa($OUT, 'IO::Socket::INET')) { $OUT->write(join('', @_)); my $stuff; @@ -2487,6 +2500,7 @@ B<$psh$psh> I Run cmd in a subprocess (reads from DB::IN, writes to DB::O . ( $rc eq $sh ? "" : " B<$psh> [I] Run I in subshell (forces \"\$SHELL -c 'cmd'\")." ) . " See 'B I' too. +B<@>I Execute I containing debugger commands (may nest). B I<-number> Display last number commands (default all). B

I Same as \"I\" in current package. B<|>I Run debugger command, piping DB::OUT to current pager. diff --git a/pod/perldebug.pod b/pod/perldebug.pod index 326bdab..6232925 100644 --- a/pod/perldebug.pod +++ b/pod/perldebug.pod @@ -387,6 +387,11 @@ their C<$ENV{SHELL}> variable) will be used, which can interfere with proper interpretation of exit status or signal and coredump information. +=item @ file + +Read and execute debugger commands from I. I may itself contain +C<@> commands. + =item H -number Display last n commands. Only commands longer than one character are