NAME
Devel::Quick - Write single-step debugger one-liners easily (DB::DB)
VERSION
version 0.08
SYNOPSIS
Devel::Trace in one line:
perl -d:Quick=
'print ">> $filename:$line $code"'
prog.pl
The above, with strict checking enabled (not default):
perl -d:Quick=-strict,
'print ">> $filename:$line $code"'
prog.pl
Or shortened:
perl -d:Quick=-s,
'print ">> $filename:$line $code"'
prog.pl
The above, but start stepping immediately (look at code in "use ..." statements)
perl -d:Quick=-begin,
'print ">> $filename:$line $code"'
prog.pl
Or shortened:
perl -d:Quick=-b,
'print ">> $filename:$line $code"'
prog.pl
You can combine opts:
perl -d:Quick=-s,-b,
'print ">> $filename:$line $code"'
prog.pl
If you need '-' as the first character in your code, use a ';':
perl -d:Quick=
'; -1 * 2;'
prog.pl
DESCRIPTION
This module allows you to write simple on-the-fly DB::DB
line debuggers easily. It injects the following code around the code passed to its import method and eval's it in:
package
DB;
use
strict;
use
warnings;
$DB::single
= 1;
sub
DB {
# Get who called us
my
(
$package
,
$filename
,
$line
) =
caller
(0);
# Get the rest from the context of who called us
my
(
undef
,
undef
,
undef
,
$subroutine
,
$hasargs
,
$wantarray
,
$evaltext
,
$is_require
,
$hints
,
$bitmask
,
$hinthash
) =
caller
(1);
return
if
$package
&&
$package
eq
'Devel::Quick'
;
my
$args
= \
@_
;
my
$code
;
{
no
strict
'refs'
;
$code
= @{
"::_<$filename"
}[
$line
];
}
no
strict;
<<CODE>>
}
By default, warnings are enabled but strict mode is disabled. If you want strict, the first argument to import should be -s
or -strict
.
By default, tracing also starts after compile time. This means that code in use statements will not be seen. If you want to trace into use statements, use the -b
or -begin
flag.
If you need to pass a -
as the first character in the Perl code, you'll need to inject a semi-colon (;) before it like so:
perl -d:Quick=
'; -1 * 2;'
prog.pl
Available Arguments
A bunch of varibales are provided by default for ease of use, including all variables returned by "caller" in perlfunc, the source code that's about to be executed, and arguments to a subroutine if the code being executed is from one. All described below.
caller() variables
See "caller" in perlfunc for a description of these.
$package
$filename
$line
$subroutine
$hasargs
$wantarray
$evaltext
$is_require
$hints
$bitmask
$hinthash
$code
The variable $code contains the line of source code about to be executed. This is provided by @{"_<$filename"}
. See perldebguts for more information.
$args
$args is simply a reference to @_
that the code that is about to be executed can see. This is only relevant within subroutines. $hasargs may tell you if this is filled in or not, or just check @$args.
Changing the underlying values will affect what the current subroutine sees.
AUTHOR
Matthew Horsfall (alh) - <WolfSage@gmail.com>