The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strictures 1;
use Test::More;
use Eval::WithLexicals;

my $eval = Eval::WithLexicals->new;

is_deeply(
  [ $eval->eval('my $x; $x++; $x;') ],
  [ 1 ],
  'Basic eval ok'
);

is_deeply(
  $eval->lexicals, { '$x' => \1 },
  'Lexical stored ok'
);

is_deeply(
  [ $eval->eval('$x+1') ],
  [ 2 ],
  'Use lexical ok'
);

is_deeply(
  [ $eval->eval('{ my $x = 0 }; $x') ],
  [ 1 ],
  'Inner scope plus lexical ok'
);

is_deeply(
  [ $eval->eval('{ my $y = 0 }; $x') ],
  [ 1 ],
  'Inner scope and other lexical ok'
);

is_deeply(
  [ keys %{$eval->lexicals} ],
  [ '$x' ],
  'No capture of invisible $y'
);

$eval->eval('my $y = sub { $_[0]+1 }');

is_deeply(
  [ $eval->eval('$y->(2)') ],
  [ 3 ],
  'Sub created ok'
);

done_testing;