view release on metacpan or search on metacpan
lib/Acme/Chef.pm view on Meta::CPAN
string is returned that reconstructs the Acme::Chef
object.
=cut
sub dump {
my $self = shift;
my $type = shift;
$type = '' if not defined $type;
local $@ = undef;
require Data::Dumper;
my $dumper = Data::Dumper->new([$self], ['self']);
$dumper->Indent(0);
$dumper->Purity(1);
my $dump = $dumper->Dump();
if ($type =~ /^autorun$/) {
$dump = 'do{my ' . $dump . ' bless $self => "' . (__PACKAGE__) . '"; $self->execute();} ';
lib/Acme/Chef/Ingredient.pm view on Meta::CPAN
my $self = {};
if ( ref $proto ) {
%$self = %$proto;
}
my %args = @_;
%$self = (
name => '',
value => undef,
measure => '',
measure_type => '',
type => '',
%$self,
%args,
);
bless $self => $class;
$self->determine_type() if not $self->{type};
lib/Acme/Chef/Ingredient.pm view on Meta::CPAN
=cut
sub value {
my $self = shift;
my $new_val = shift;
$self->{value} = $new_val if defined $new_val;
if (not defined $self->{value}) {
my $name = $self->{name};
croak "Attempted to use undefined ingredient '$name'.";
}
return $self->{value};
}
=item liquify
Sets the type of the Ingredient to be liquid.
lib/Acme/Chef/Recipe.pm view on Meta::CPAN
present.
=cut
sub require_ingredient {
my $self = shift;
my $ingredient = shift;
my $sub = shift;
(defined $ingredient and exists $self->{ingredients}{$ingredient})
or croak "Unknown ingredient '".(defined$ingredient?$ingredient:'<undefined>').
"' required for recipe '$self->{name}'".
(defined $sub?" in '$sub'":'').".";
return $self;
}
=item output
Mutator for the Recipe output.
lib/Acme/Chef/Recipe.pm view on Meta::CPAN
my %ingredients;
my $ingredient_no = 0;
foreach (@ingredients) {
$ingredient_no++;
my $value;
if (s/^[ ]*(\d+)[ ]//) {
$value = $1;
} else {
$value = undef;
}
my $measure_type = '';
foreach my $type ( keys %Acme::Chef::Ingredient::MeasureTypes ) {
if ( s/^\Q$type\E[ ]// ) {
$measure_type = $type;
last;
}
}
script/chef view on Meta::CPAN
-f $program_file or pod2usage(
-msg => "You specified an invalid filename.",
-verbose => 0, # Only synopsis
);
open my $fh, '<', $program_file or pod2usage(
-msg => "You specified an invalid filename.",
-verbose => 0, # Only synopsis
);
local $/ = undef;
my $code = <$fh>;
close $fh;
my $compiled = Acme::Chef->compile($code);
print $compiled->execute();
__END__
script/compilechef view on Meta::CPAN
not defined $target_file and pod2usage(
-msg => "You specified an invalid target filename.",
-verbose => 0, # Only synopsis
);
open my $fh, '<', $program_file or pod2usage(
-msg => "You specified an invalid filename.",
-verbose => 0, # Only synopsis
);
local $/ = undef;
my $code = <$fh>;
close $fh;
my $compiled = Acme::Chef->compile($code);
my $module_code;
foreach my $module (
qw(
t/01hello.t view on Meta::CPAN
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'Hello world';
my $expected_result = 'Hello world!';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
$result = eval $dump;
t/02helloliquefy.t view on Meta::CPAN
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'Hello world';
my $expected_result = 'Hello world!';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
$result = eval $dump;
t/03bowlquantifier.t view on Meta::CPAN
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'Dish quantifier';
my $expected_result = 'HHHH';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
$result = eval $dump;
t/06addto2ndbowl.t view on Meta::CPAN
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'Add to 2nd bowl';
my $expected_result = ' 2';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
$result = eval $dump;
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'JAPH';
my $expected_result = 'Just another Chef/Perl Hacker,';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
$result = eval $dump;
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'Exponentiation';
my $expected_result = ' 8';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
$result = eval $dump;
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'Long test';
my $expected_result = ' 97 98 99 94 95 96 93 90 91 92';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
$result = eval $dump;
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'Factorial';
my $expected_result = ' 1 2 6 24 120 720 5040 40320 362880 3628800 39916800 479001600';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
$result = eval $dump;
t/41stdin.t view on Meta::CPAN
use Acme::Chef;
ok(1, "Module compiled."); # If we made it this far, we're ok.
#########################
my $testname = 'STDIN-Test';
my $expected_result = ' 10';
local $/ = undef;
my $code = <DATA>;
my $compiled = Acme::Chef->compile( $code );
ok(ref $compiled eq 'Acme::Chef', "$testname code compiled.");
local $| = 1;
*OLDSTDIN = *STDIN;
(*STDIN) = tempfile(UNLINK => 1);
t/41stdin.t view on Meta::CPAN
print STDIN "10\n";
seek STDIN, 0, 0;
ok(1, "Redirected STDIN for testing.");
my $result = $compiled->execute();
ok($result eq $expected_result, "Correct result.");
my $dump = $compiled->dump();
ok((defined $dump and not ref $dump), "Dumped.");
local $@ = undef;
my $reconstructed = eval $dump;
ok((not $@ and ref $reconstructed eq 'Acme::Chef'), "Reconstruction from dump successful.");
$result = $reconstructed->execute();
ok($result eq $expected_result, "Correct result after reconstruction.");
$dump = $compiled->dump('autorun');
ok((defined $dump and not ref $dump), "Dumped with autorun enabled.");
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");