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;