use strict;
-use warnings;
-use readline qw(readline);
+use warnings FATAL => qw(all);
+no if $] >= 5.018, warnings => "experimental::smartmatch";
+use File::Basename;
+use lib dirname (__FILE__);
+use readline qw(mal_readline set_rl_mode);
use feature qw(switch);
use reader;
return PRINT(EVAL(READ($str), {}));
}
+if (scalar(@ARGV) > 0 && $ARGV[0] eq "--raw") {
+ set_rl_mode("raw");
+}
while (1) {
- my $line = readline("user> ");
+ my $line = mal_readline("user> ");
if (! defined $line) { last; }
- eval {
- use autodie; # always "throw" errors
- print(REP($line), "\n");
- 1;
- };
- if (my $err = $@) {
- chomp $err;
- print "Error: $err\n";
- }
+ do {
+ local $@;
+ my $ret;
+ eval {
+ use autodie; # always "throw" errors
+ print(REP($line), "\n");
+ 1;
+ } or do {
+ my $err = $@;
+ given (ref $err) {
+ when (/^BlankException/) {
+ # ignore and continue
+ }
+ default {
+ chomp $err;
+ print "Error: $err\n";
+ }
+ }
+ };
+ };
}