AC-MrGamoo
view release on metacpan or search on metacpan
lib/AC/MrGamoo/Submit/Compile.pm view on Meta::CPAN
# -*- perl -*-
# Copyright (c) 2009 AdCopy
# Author: Jeff Weisberg
# Created: 2009-Oct-27 17:39 (EDT)
# Function: compile job component
#
# $Id: Compile.pm,v 1.1 2010/11/01 18:42:00 jaw Exp $
package AC::MrGamoo::Submit::Compile;
use AC::MrGamoo::Submit::Compile::Block;
use strict;
my %COMPILE = (
config => { tag => 'config', multi => 1, },
doc => { tag => 'block', multi => 1, },
init => { tag => 'block', multi => 0, },
common => { tag => 'simple', multi => 0, },
map => { tag => 'block', multi => 0, required => 1, },
reduce => { tag => 'block', multi => 1, required => 1, },
final => { tag => 'block', multi => 0, },
readinput => { tag => 'block', multi => 0, },
filefilter => { tag => 'block', multi => 0, },
);
my %BLOCK = (
init => 'simple',
cleanup => 'simple',
attr => 'config',
);
sub new {
my $class = shift;
my $me = bless {
@_,
# file | text
}, $class;
if( $me->{file} ){
open(my $fd, $me->{file}) || $me->_die("cannot open file: $!");
local $/ = undef;
$me->{text} = <$fd>;
close $fd;
}
$me->{lines} = [ split /^/m, $me->{text} ];
$me->_compile();
$me->_check();
return $me;
}
sub compile {
my $me = shift;
my $name = shift;
my $num = shift;
my $b = $me->{content}{$name};
return unless $b;
$b = $b->[$num] if defined($num) && ref($b);
return $b->compile( $me->{content}{common} );
}
sub src {
my $me = shift;
return $me->{_file_content};
}
sub get_code {
my $me = shift;
my $name = shift;
my $num = shift;
my $prog = $me->compile( $name, $num );
return unless $prog;
my $c = eval $prog;
( run in 0.803 second using v1.01-cache-2.11-cpan-f56aa216473 )