| Text-MicroMason documentation | Contained in the Text-MicroMason distribution. |
Text::MicroMason::Debug - Provide developer info via warn
Instead of using this class directly, pass its name to be mixed in:
use Text::MicroMason; my $mason = Text::MicroMason->new( -Debug );
Use the standard compile and execute methods to parse and evalute templates:
print $mason->compile( text=>$template )->( @%args ); print $mason->execute( text=>$template, @args );
You'll see lots of warning output on STDERR:
MicroMason Debug create: Text::MicroMason::Base::AUTO::Debug...
MicroMason Debug source: q(Hello <% $noun %>!)
MicroMason Debug lex: text, q(Hello ), expr, q( $noun ), text, q(!)
MicroMason Debug eval: sub { my @OUT; my $_out = sub { push ...
This package provides numerous messages via warn for developer use when debugging templates built with Text::MicroMason.
Activates debugging messages for many methods. Defaults to logging everything.
Can be set to 0 or 1 to log nothing or everything.
Alternately, set this to a hash reference containing values for the steps you are interested in to only log this items:
debug => { source => 1, eval => 1 }
You can also selectively surpress some warnings:
debug => { default => 1, source => 0, eval => 0 }
Called to provide a debugging message for developer reference. No output is produced unless the object's 'debug' flag is true.
For an overview of this templating framework, see Text::MicroMason.
This is a mixin class intended for use with Text::MicroMason::Base.
For distribution, installation, support, copyright and license information, see Text::MicroMason::Docs::ReadMe.
| Text-MicroMason documentation | Contained in the Text-MicroMason distribution. |
package Text::MicroMason::Debug; use strict; use Carp; ###################################################################### use vars qw( %Defaults ); sub defaults { (shift)->NEXT('defaults'), debug => { default => 1 }, } ###################################################################### sub debug_msg { my $self = shift; my $type = shift; my $flag = ( ! ref $self->{debug} ) ? $self->{debug} : exists( $self->{debug}{$type} ) ? $self->{debug}{$type} : $self->{debug}{'default'}; if ( $flag ) { warn "MicroMason Debug $type: " . ( ( @_ == 1 ) ? $_[0] : join( ', ', map Text::MicroMason::Base::_printable(), @_ ) ) . "\n"; } wantarray ? @_ : $_[0]; } ###################################################################### sub new { my $self = shift; $self->debug_msg( 'new', $self, @_ ); $self->NEXT( 'new', @_ ); } sub create { my $self = (shift)->NEXT( 'create', @_ ); $self->debug_msg( 'create', ref($self), %$self ); return $self; } sub prepare { my ( $self, $src_type, $src_data ) = @_; my @result = $self->NEXT( 'prepare', $src_type, $src_data ); if ( scalar @result > 3 or grep { $result[$_] ne $_[$_] } 0 .. 2 ){ $self->debug_msg( 'prepare', @result ); } return @result; } sub interpret { my $self = shift; $self->debug_msg( 'interpret', @_ ); $self->NEXT( 'interpret', @_ ) } # $contents = $mason->read_file( $filename ); sub read_file { my $self = shift; $self->debug_msg( 'read', "Opening file '$_[0]'" ); $self->NEXT( 'read_file', @_ ) } sub lex { my $self = shift; $self->debug_msg( 'source', @_ ); $self->debug_msg( 'lex', $self->NEXT( 'lex', @_ ) ); } sub assemble { my $self = shift; $self->debug_msg( 'assemble', $self->NEXT( 'assemble', @_ ) ); } sub eval_sub { my $self = shift; $self->debug_msg( 'eval', @_ ); $self->NEXT( 'eval_sub', @_ ) } ###################################################################### 1; __END__ ######################################################################