|
NAMEEval::WithLexicals - pure perl eval with persistent lexical variablesSYNOPSIS# file: bin/tinyrepl #!/usr/bin/env perl use strictures 1; use Eval::WithLexicals; use Term::ReadLine; use Data::Dumper; use Getopt::Long; GetOptions( "plugin=s" => \my @plugins ); $SIG{INT} = sub { warn "SIGINT\n" }; { package Data::Dumper; no strict 'vars'; $Terse = $Indent = $Useqq = $Deparse = $Sortkeys = 1; $Quotekeys = 0; } my $eval = @plugins ? Eval::WithLexicals->with_plugins(@plugins)->new : 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 $ METHODSnewmy $eval = Eval::WithLexicals->new( lexicals => { '$x' => \1 }, # default {} in_package => 'PackageToEvalIn', # default Eval::WithLexicals::Scratchpad context => 'scalar', # default 'list' prelude => 'use warnings', # default 'use strictures 1' ); evalmy @return_value = $eval->eval($code_to_eval); lexicalsmy $current_lexicals = $eval->lexicals; $eval->lexicals(\%new_lexicals); in_packagemy $current_package = $eval->in_package; $eval->in_package($new_package); contextmy $current_context = $eval->context; $eval->context($new_context); # 'list', 'scalar' or 'void' preludeCode to run before evaling code. Loads strictures by default.my $current_prelude = $eval->prelude; $eval->prelude(q{use warnings}); # only warnings, not strict. with_pluginsmy $eval = Eval::WithLexicals->with_plugins("HintPersistence")->new; Construct a class with the given plugins. Plugins are roles located under a package name like "Eval::WithLexicals::With*". Current plugins are:
AUTHORMatt S. Trout <mst@shadowcat.co.uk>CONTRIBUTORSDavid Leadbeater <dgl@dgl.cx>haarg - Graham Knop (cpan:HAARG) <haarg@cpan.org> COPYRIGHTCopyright (c) 2010 the Eval::WithLexicals "AUTHOR" and "CONTRIBUTORS" as listed above.LICENSEThis library is free software and may be distributed under the same terms as perl itself.
Visit the GSP FreeBSD Man Page Interface. |