1 package Tak::EvalService;
3 use Eval::WithLexicals;
5 use Data::Dumper::Concise;
6 use Capture::Tiny qw(capture);
8 has 'eval_withlexicals' => (is => 'lazy');
10 sub _build_eval_withlexicals {
11 Eval::WithLexicals->new
15 my ($self, $perl) = @_;
17 return MISTAKE => eval_input => "No code supplied";
19 if (my $ref = ref($perl)) {
20 return MISTAKE => eval_input => "Code was a ${ref} reference";
23 my ($stdout, $stderr);
25 ($stdout, $stderr) = capture {
26 @ret = $self->eval_withlexicals->eval($perl);
32 ($code, @ret) = (FAILURE => $@);
35 unless (eval { $dumped_ret = Dumper(@ret); 1 }) {
36 $dumped_ret = "Error dumping ${code} result: $@";
40 stdout => $stdout, stderr => $stderr, return => $dumped_ret