The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Tak::REPL;

use Term::ReadLine;
use Moo;

has client => (is => 'ro', required => 1);

sub run {
  my $client = $_[0]->client;
  my $read = Term::ReadLine->new('REPL');

  while (1) {
    my $line = $read->readline('re.pl$ ');
    last unless defined $line;
    next unless length $line;
    my $result = $client->do(eval => $line);
    print exists($result->{return})
            ? $result->{return}
            : "Error: ".$result->{exception};
    if ($result->{stdout}) {
      chomp($result->{stdout});
      print "STDOUT:\n${\$result->{stdout}}\n";
    }
    if ($result->{stderr}) {
      chomp($result->{stderr});
      print "STDERR:\n${\$result->{stderr}}\n";
    }
  }
}

1;