Acme-Chef
view release on metacpan or search on metacpan
lib/Acme/Chef.pm view on Meta::CPAN
chef.pl file.chef
# Using the module
use Acme::Chef;
my $compiled = Acme::Chef->compile($code_string);
print $compiled->execute();
my $string = $compiled->dump(); # requires Data::Dumper
# Save it to disk, send it over the web, whatever.
my $reconstructed_object = eval $string;
# or:
$string = $compiled->dump('autorun'); # requires Data::Dumper
# Save it to disk, send it over the web, whatever.
my $output_of_chef_program = eval $string;
=head1 DESCRIPTION
Chef is an esoteric programming language in which programs look like
recipes. I needn't mention that using it in
production environment, heck, using it for anything but entertainment
ought to result in bugs and chaos in reverse order.
All methods provided by Acme::Chef are adequately described in the
synopsis. If you don't think so, you need to read the source code.
lib/Acme/Chef.pm view on Meta::CPAN
$start_recipe->execute($self->{recipes});
return $start_recipe->output();
}
=item dump
Takes one optional argument. If it equals 'autorun',
dump returns a string that, when evaluated, executes
the program and returns the output.
If the argument does not equal 'autorun', a different
string is returned that reconstructs the Acme::Chef
object.
=cut
sub dump {
my $self = shift;
use Test::More;
eval "use Test::Pod 1.00";
plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
all_pod_files_ok();
t/00podcover.t view on Meta::CPAN
use Test::More;
eval "use Test::Pod::Coverage 1.00";
plan skip_all => "Test::Pod::Coverage 1.00 required for testing POD coverage" if $@;
all_pod_coverage_ok();
t/01hello.t view on Meta::CPAN
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;
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");
__DATA__
Hello World Souffle.
This recipe prints the immortal words "Hello world!", in a basically
brute force way. It also makes a lot of food for one person.
t/02helloliquefy.t view on Meta::CPAN
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;
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");
__DATA__
Hello World Souffle.
This recipe prints the immortal words "Hello world!", in a basically
brute force way. It also makes a lot of food for one person.
t/03bowlquantifier.t view on Meta::CPAN
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;
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");
__DATA__
Many bowls.
This recipe uses many bowls.
Ingredients.
t/06addto2ndbowl.t view on Meta::CPAN
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;
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");
__DATA__
Add to 2nd bowl.
Ingredients.
1 apfel
1 birne
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;
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");
__DATA__
JAPH Souffle.
Ingredients.
44 potatoes
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;
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");
__DATA__
Exponentiation cake.
Calculate exponentiation: sugar ^ flour.
Ingredients.
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;
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");
__DATA__
Long test.
Ingredients.
100 kg time
100 lines of code
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;
ok((not $@ and $result eq $expected_result), "Correct result after reconstruction.");
__DATA__
Factorial.
Ingredients.
12 cups vodka
1 bucket
t/41stdin.t view on Meta::CPAN
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.");
( run in 2.658 seconds using v1.01-cache-2.11-cpan-98e64b0badf )