Merge pull request #20 from def-/master
[jackhill/mal.git] / perl / env.pm
index 77d42af..8012565 100644 (file)
@@ -4,23 +4,23 @@ use strict;
 use warnings;
 use Exporter 'import';
 
-use Data::Dumper;
 
 {
     package Env;
+    use Data::Dumper;
     sub new  {
         my ($class,$outer,$binds,$exprs) = @_;
         my $data = { __outer__ => $outer };
         if ($binds) {
-            for (my $i=0; $i<scalar(@{$binds}); $i++) {
-                if (${$binds->[$i]} eq "&") {
+            for (my $i=0; $i<scalar(@{$binds->{val}}); $i++) {
+                if (${$binds->nth($i)} eq "&") {
                     # variable length arguments
-                    my @earr = @$exprs; # get the array
+                    my @earr = @{$exprs->{val}}; # get the array
                     my @new_arr = @earr[$i..$#earr]; # slice it
-                    $data->{${$binds->[$i+1]}} = List->new(\@new_arr);
+                    $data->{${$binds->nth($i+1)}} = List->new(\@new_arr);
                     last;
                 } else {
-                    $data->{${$binds->[$i]}} = $exprs->[$i];
+                    $data->{${$binds->nth($i)}} = $exprs->nth($i);
                 }
             }
         }
@@ -28,20 +28,20 @@ use Data::Dumper;
     }
     sub find {
         my ($self, $key) = @_;
-        if (exists $self->{$key}) { return $self; }
+        if (exists $self->{$$key}) { return $self; }
         elsif ($self->{__outer__}) { return $self->{__outer__}->find($key); }
         else { return undef; }
     }
     sub set {
         my ($self, $key, $value) = @_;
-        $self->{$key} = $value;
+        $self->{$$key} = $value;
         return $value
     }
     sub get {
         my ($self, $key) = @_;
         my $env = $self->find($key);
-        die "'" . $key . "' not found" unless $env;
-        return $env->{$key};
+        die "'" . $$key . "' not found\n" unless $env;
+        return $env->{$$key};
     }
 }