+#!/usr/bin/env perl
+
use strictures 1;
use Eval::WithLexicals;
use Term::ReadLine;
-use Data::Dumper::Concise;
-use Try::Tiny;
+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 $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; try {
+ my @ret; eval {
local $SIG{INT} = sub { die "Caught SIGINT" };
- @ret = $eval->eval($line);
- } catch {
- @ret = ("Error!", $_);
- };
+ @ret = $eval->eval($line); 1;
+ } or @ret = ("Error!", $@);
print Dumper @ret;
}
+
+__END__
+
+=head1 NAME
+
+tinyrepl - Tiny REPL
+
+=head1 SYNOPSIS
+
+ $ tinyrepl
+ re.pl$ "s" x 5
+ "sssss"
+ re.pl$ exit
+
+ $ tinyrepl --plugin HintPersistence
+
+=head1 DESCRIPTION
+
+tinyrepl is a minimal pure-Perl REPL. It is just a small wrapper
+around L<Eval::WithLexicals>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item C<--plugin=>
+
+Loads a plugin into the REPL. See L<Eval::WithLexicals/with_plugins>.
+
+=back
+
+=head1 AUTHOR
+
+Matt S. Trout <mst@shadowcat.co.uk>
+
+=head1 CONTRIBUTORS
+
+David Leadbeater <dgl@dgl.cx>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2012 the Eval::WithLexicals L</AUTHOR> and L</CONTRIBUTORS>
+as listed above.
+
+=head1 LICENSE
+
+This library is free software and may be distributed under the same terms
+as perl itself.
+
+=cut