[LON-CAPA-cvs] cvs: loncom /xml run.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Fri, 29 Mar 2002 18:21:00 -0000
albertel Fri Mar 29 13:21:00 2002 EDT
Modified files:
/loncom/xml run.pm
Log:
- do no more than 10 rounds of substitutions before exiting.
Index: loncom/xml/run.pm
diff -u loncom/xml/run.pm:1.23 loncom/xml/run.pm:1.24
--- loncom/xml/run.pm:1.23 Fri Feb 15 16:33:12 2002
+++ loncom/xml/run.pm Fri Mar 29 13:21:00 2002
@@ -1,6 +1,6 @@
package Apache::run;
#
-# $Id: run.pm,v 1.23 2002/02/15 21:33:12 albertel Exp $
+# $Id: run.pm,v 1.24 2002/03/29 18:21:00 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -25,33 +25,13 @@
# http://www.lon-capa.org/
#
-sub evaluateold {
- my ($expression,$safeeval,$decls) = @_;
-# print "inside2 evaluate $decls with $expression<br />\n";
-# gerd's old method interpolates unset vars
-# $safeeval->reval('return qq('.$expression.');');
- unless (defined($expression)) { return ''; }
- my $result = '';
- $@='';
- $safeeval->reval('$_=q|'.$expression.'|;');
- if ($@ eq '') {
- $safeeval->reval('{'.$decls.'$_=~s/(\$[A-Za-z]\w*)/(defined(eval($1))?eval($1):$1)/ge;}');
- if ($@ eq '') {
- $result = $safeeval->reval('return $_;');
- } else {
- &Apache::lonxml::error("substitution on:$expression:with:$decls:caused:$@:");
- }
- } else {
- &Apache::lonxml::error("defining:$expression:caused:$@:");
- }
- return $result
-}
-
$Apache::run::EVALUATE_STRING=<<'ENDEVALUATE';
- my %oldexpressions=();
- while (!$oldexpressions{$_}) {
- $oldexpressions{$_}=1;
+ my %_LONCAPA_INTERNAL_oldexpressions=();
+ my $i=0;
+ while (!$_LONCAPA_INTERNAL_oldexpressions{$_}) {
+ $_LONCAPA_INTERNAL_oldexpressions{$_}=1;
$_ =~s/((?:\$|\&)(?:[\#|\$]*[A-Za-z][\w]*|\{[A-Za-z][\w]*\}))([\[\{][^\$\&\]\}]+[\]\}])*?(\([^\$\&\)]+\))*?(?=[^\[\{\(]|$)/eval(defined(eval($1.$2))?eval('$1.$2.$3'):'$1.$2.$3')/seg;
+ if ($i++ > 10 ) { last; }
}
ENDEVALUATE