Eval::WithLexicals - pure perl eval with persistent lexical variables
# file: bin/tinyrepl #!/usr/bin/env perl use strictures 1; use Eval::WithLexicals; use Term::ReadLine; use Data::Dumper; $SIG{INT} = sub { warn "SIGINT\n" }; { package Data::Dumper; no strict 'vars'; $Terse = $Indent = $Useqq = $Deparse = $Sortkeys = 1; $Quotekeys = 0; } my $eval = Eval::WithLexicals->new; my $read = Term::ReadLine->new('Perl REPL'); while (1) { my $line = $read->readline('re.pl$ '); exit unless defined $line; my @ret; eval { local $SIG{INT} = sub { die "Caught SIGINT" }; @ret = $eval->eval($line); 1; } or @ret = ("Error!", $@); print Dumper @ret; } # shell session: $ perl -Ilib bin/tinyrepl re.pl$ my $x = 0; 0 re.pl$ ++$x; 1 re.pl$ $x + 3; 4 re.pl$ ^D $
my $eval = Eval::WithLexicals->new( lexicals => { '$x' => \1 }, # default {} in_package => 'PackageToEvalIn', # default Eval::WithLexicals::Scratchpad context => 'scalar', # default 'list' );
my @return_value = $eval->eval($code_to_eval);
my $current_lexicals = $eval->lexicals; $eval->lexicals(\%new_lexicals);
my $current_package = $eval->in_package; $eval->in_package($new_package);
my $current_context = $eval->context; $eval->context($new_context); # 'list', 'scalar' or 'void'
Matt S. Trout <mst@shadowcat.co.uk>
David Leadbeater <dgl@dgl.cx>
Copyright (c) 2010 the Eval::WithLexicals "AUTHOR" and "CONTRIBUTORS" as listed above.
This library is free software and may be distributed under the same terms as perl itself.
To install Eval::WithLexicals, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Eval::WithLexicals
CPAN shell
perl -MCPAN -e shell install Eval::WithLexicals
For more information on module installation, please visit the detailed CPAN module installation guide.