--- loncom/xml/run.pm	2000/06/28 13:01:52	1.1
+++ loncom/xml/run.pm	2000/06/29 20:27:44	1.5
@@ -1,9 +1,21 @@
-        sub evaluate {
-	    my ($expression,$safeeval) = @_;
-            return $safeeval->reval($expression);
-        }
+package Apache::run;
 
-        sub run {
-	    my ($code,$safeeval) = @_;
-            $safeeval->reval($code);
-        }
+sub evaluate {
+  my ($expression,$safeeval,$decls) = @_;
+# print "inside2 evaluate with $expression\n";
+# gerd's old method interpolates unset vars
+# $safeeval->reval('return qq('.$expression.');');
+  unless (defined $expression) { return ''; }
+  $safeeval->reval('$_=\''.$expression.'\';');
+  $safeeval->reval('{'.$decls.'$_=~s/(\$\{?[A-Za-z]\w*\}?)/(defined(eval($1))?eval($1):$1)/ge;}');
+  $safeeval->reval('return $_;');
+}
+
+sub run {
+  my ($code,$safeeval) = @_;
+#  print "inside run\n";
+  $safeeval->reval($code);
+}
+
+1;
+__END__;