sub evaluate { my $contvar = shift; shift; my $estr = join(' ', @_); my @whatsleft = @_; print " evaluating '$estr'\n"; $estr =~ s/ARRAY\x28[^\x28\x29]+\x29//g; $estr = trim($estr); if ($estr !~ /^[\s\.\/\x28\x290-9eE*+-]+$/) { my $parser = SpiceGrammar->new() or die "Bad SpiceGrammar: $!\n"; print " evaluating variable\n"; defined(my $value = $parser->vardef($estr)) or die "Bad input: {$estr} $!\n"; if ($value eq '') { $value = 0; print " substituting\n"; } return $value; } else { my $value = eval($estr); $vartable{$contvar} = $value; return $value; } }