Perl: add step3_env
[jackhill/mal.git] / perl / env.pm
1 package reader;
2 use feature qw(switch);
3 use strict;
4 use warnings;
5 use Exporter 'import';
6
7 use Data::Dumper;
8
9 {
10 package Env;
11 sub new {
12 my ($class,$outer,$binds,$exprs) = @_;
13 my $data = { __outer__ => $outer };
14 bless $data => $class
15 }
16 sub find {
17 my ($self, $key) = @_;
18 if (exists $self->{$key}) { return $self; }
19 elsif ($self->{__outer__}) { return $self->{__outer__}->find($key); }
20 else { return undef; }
21 }
22 sub set {
23 my ($self, $key, $value) = @_;
24 $self->{$key} = $value;
25 return $value
26 }
27 sub get {
28 my ($self, $key) = @_;
29 my $env = $self->find($key);
30 die "'" . $key . "' not found" unless $env;
31 return $env->{$key};
32 }
33 }
34
35 #my $e1 = Env->new();
36 #print Dumper($e1);
37 #
38 #my $e2 = Env->new();
39 #$e2->set('abc', 123);
40 #$e2->set('def', 456);
41 #print Dumper($e2);
42 #
43 #my $e3 = Env->new($e2);
44 #$e3->set('abc', 789);
45 #$e3->set('ghi', 1024);
46 #print Dumper($e3);
47 #
48 #print Dumper($e3->find('abc'));
49 #print Dumper($e3->get('abc'));
50 #print Dumper($e3->find('def'));
51 #print Dumper($e3->get('def'));
52
53 1;