The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Daiku::Daikufile;
use strict;
use warnings;
use Mouse;

my $file_id = 1;

sub parse {
    my ($self, $file) = @_;

    my $code = do {
        open my $fh, "<", $file or die "open $file failed: $!\n";
        local $/; <$fh>;
    };

    # code taken from Module::CPANfile::Environment
    my ($engine, $err);
    {
        local $@;
        $file_id++;
        $engine = eval <<"EVAL"; ## no critic
package Daiku::Daikufile::Sandbox$file_id;
use Daiku;
use strict;
use warnings;
use utf8;
use autodie;
use lib 'lib';

# line 1 "$file"
$code;
engine;
EVAL
        $err = $@;
    }

    if ($err) { die "Parsing $file failed: $err\n" }

    return $engine;
}

no Mouse; __PACKAGE__->meta->make_immutable;

1;