10 my ($name, $rest) = split /: /;
11 my @ops = split /\s+/, $rest;
15 $val{$name} = $ops[0];
20 return $val{$var} if defined $val{$var};
21 return undef if !defined $expr{$var};
22 my ($arg1, $op, $arg2) = @{ $expr{$var} };
23 my $val1 = walk($arg1);
24 my $val2 = walk($arg2);
25 return undef if !defined $val1 || !defined $val2;
27 return $val{$var} = $val1 + $val2;
28 } elsif ($op eq '-') {
29 return $val{$var} = $val1 - $val2;
30 } elsif ($op eq '*') {
31 return $val{$var} = $val1 * $val2;
32 } elsif ($op eq '/') {
33 return $val{$var} = $val1 / $val2;
41 my $val = $val{$expr{root}[2]};
42 my $var = $expr{root}[0];
44 while ($var ne 'humn') {
45 say "$var = $val, expr = @{ $expr{$var} }";
46 my ($arg1, $op, $arg2) = @{ $expr{$var} };
47 $arg1 = $val{$arg1} if defined $val{$arg1};
48 $arg2 = $val{$arg2} if defined $val{$arg2};
53 } elsif ($op eq '*') {
55 } elsif ($op eq '+') {
57 } elsif ($op eq '-') {
60 } elsif ($arg1 =~ /\d/) {
64 } elsif ($op eq '*') {
66 } elsif ($op eq '+') {
68 } elsif ($op eq '-') {
74 say "var $var = $val";