—package
Od;
our
$VERSION
=
'0.13'
;
use
B;
use
Carp;
sub
import
{
my
(
$class
,
@options
) =
@_
;
my
$backend
=
shift
(
@options
);
eval
q[
BEGIN { my $compile; }
CHECK {
use B::]
.
$backend
.
q[ ();
if ($@) { croak "use of backend $backend failed: $@"; }
$compile = &{"B::${backend}::compile"}(@options);
die $compile if ref($compile) ne "CODE";
}
INIT {
# local $savebackslash = $\; local ($\,$",$,) = (undef,' ','');
&$compile();
}
]
;
die
$@
if
$@;
}
1;
__END__
=head1 NAME
Od - Debug a Perl Compiler backend
=head1 SYNOPSIS
perl -d -MOd=Backend[,OPTIONS] foo.pl
Od::CODE(0x154c5a0)((eval 9)[lib/Od.pm:33]:25):
25: &$compile();
DB<1> s
B::C::CODE(0x12c0aa0)(lib/B/C.pm:3163):
3163: return sub { save_main() };
DB<1> s
B::C::save_main(lib/B/C.pm:2881):
2881: my $warner = $SIG{__WARN__};
=head1 DESCRIPTION
This module is a debugging replacement to L<O>, the B<Perl Compiler> frontend,
a source level debugger to step through a compiler.
It delays the start of the B compiler C<compile> function from the CHECK block
to the INIT block, so that the Perl debugger can be started there.
Note that B<Od> handles the given options correctly, but does not step through
the option handler. See L<Od_o> to step-through the option handling part.
=head1 AUTHOR
Reini Urban, C<rurban@cpan.org> 2009
=cut