package Template::Extract; $Template::Extract::VERSION = '0.41'; use 5.006; use strict; use warnings; use constant RUN_CLASS => ( __PACKAGE__ . '::Run' ); use constant COMPILE_CLASS => ( __PACKAGE__ . '::Compile' ); use constant PARSER_CLASS => ( __PACKAGE__ . '::Parser' ); our ( $DEBUG, $EXACT ); sub new { my $self = shift; my $class = ref($self) || $self; my $run_class = $class->RUN_CLASS; my $compile_class = $class->COMPILE_CLASS; my $parser_class = $class->PARSER_CLASS; foreach my $subclass ( $run_class, $compile_class, $parser_class ) { no strict 'refs'; $class->load($subclass); *{"$subclass\::DEBUG"} = *DEBUG; *{"$subclass\::EXACT"} = *EXACT; } bless( { run_object => $run_class->new(@_), compile_object => $compile_class->new(@_), parser_object => $parser_class->new(@_), }, $class ); } sub load { my ( $self, $class ) = @_; $class =~ s{::}{/}g; require "$class.pm"; } sub extract { my $self = shift; my $template = shift; $self->run( $self->compile($template), @_ ); } sub compile { my $self = shift; my $template = shift; $self->{compile_object}->compile( $template, $self->{parser_object} ); } sub run { my $self = shift; $self->{run_object}->run(@_); } 1; __END__ =head1 NAME Template::Extract - Use TT2 syntax to extract data from documents =head1 VERSION This document describes version 0.41 of Template::Extract, released October 16, 2007. =head1 SYNOPSIS use Template::Extract; use Data::Dumper; my $obj = Template::Extract->new; my $template = << '.'; . my $document = << '.'; Great links . print Data::Dumper::Dumper( $obj->extract($template, $document) ); =head1 DESCRIPTION This module adds template extraction functionality to the B