Perl: add step4_if_fn_do
[jackhill/mal.git] / perl / step1_read_print.pl
1 use strict;
2 use warnings;
3 use readline qw(readline);
4 use feature qw(switch);
5
6 use reader;
7 use printer;
8
9 # read
10 sub READ {
11 my $str = shift;
12 return reader::read_str($str);
13 }
14
15 # eval
16 sub EVAL {
17 my($ast, $env) = @_;
18 return $ast;
19 }
20
21 # print
22 sub PRINT {
23 my $exp = shift;
24 return printer::_pr_str($exp);
25 }
26
27 # repl
28 sub REP {
29 my $str = shift;
30 return PRINT(EVAL(READ($str), {}));
31 }
32
33 while (1) {
34 my $line = readline("user> ");
35 if (! defined $line) { last; }
36 eval {
37 use autodie; # always "throw" errors
38 print(REP($line), "\n");
39 1;
40 };
41 if (my $err = $@) {
42 chomp $err;
43 print "Error: $err\n";
44 }
45 }