Annotation of loncom/xml/run.pm, revision 1.11

1.2       albertel    1: package Apache::run;
1.1       sakharuk    2: 
1.10      albertel    3: sub evaluateold {
1.4       albertel    4:   my ($expression,$safeeval,$decls) = @_;
1.6       albertel    5: # print "inside2 evaluate $decls with $expression<br>\n";
1.3       albertel    6: # gerd's old method interpolates unset vars
1.5       albertel    7: # $safeeval->reval('return qq('.$expression.');');
                      8:   unless (defined $expression) { return ''; }
1.7       albertel    9:   my $result = '';
                     10:   $@='';
1.9       sakharuk   11:   $safeeval->reval('$_=q|'.$expression.'|;');
1.7       albertel   12:   if ($@ eq '') {
1.9       sakharuk   13:     $safeeval->reval('{'.$decls.'$_=~s/(\$[A-Za-z]\w*)/(defined(eval($1))?eval($1):$1)/ge;}');
1.7       albertel   14:     if ($@ eq '') {
                     15:       $result = $safeeval->reval('return $_;');
                     16:     } else {
1.10      albertel   17:       &Apache::lonxml::error("substitution on:$expression:with:$decls:caused");
1.7       albertel   18:     }
                     19:   } else {
                     20:     &Apache::lonxml::error("defining:$expression:caused");
                     21:   }
                     22:   if ($@ ne '') {&Apache::lonxml::error($@);}
1.10      albertel   23:   return $result
                     24: }
                     25: 
1.11    ! albertel   26: $Apache::run::EVALUATE_STRING=<<'ENDEVALUATE';  
        !            27:   my %oldexpressions=();
        !            28:   while (!$oldexpressions{$_}) {
        !            29:     $oldexpressions{$_}=1;
        !            30:     $_ =~s/((?:\$|\&)(?:[\#|\$]*[A-Za-z][\w]*|\{[A-Za-z][\w]*\}))([\[|\{][\w\'\"]+[\]\}])*?(\([\w\'\"]+\))*?(?=[^\[\{\(]|$)/eval(defined(eval($1.$2))?eval('$1.$2.$3'):'$1.$2.$3')/seg;
        !            31:   }
        !            32: ENDEVALUATE
        !            33: 
1.10      albertel   34: sub evaluate {
                     35:   my ($expression,$safeeval,$decls) = @_;
                     36:   unless (defined $expression) { return ''; }
                     37:   my $result = '';
                     38:   $@='';
1.11    ! albertel   39:   print $decls
        !            40:   $safeeval->reval('{'.$decls.';$_=<<\'EXPRESSION\';'."\n".$expression.
        !            41: 		   "\n".'EXPRESSION'."\n".$EVALUATE_STRING.'}');
        !            42: #  $safeeval->reval('{'.$decls.';<< &evaluate(q|'.$expression.'|);}');
1.10      albertel   43:   if ($@ eq '') {
                     44:     $result = $safeeval->reval('return $_;');
                     45:   } else {
                     46:     &Apache::lonxml::error("substitution on:$expression:with:$decls:caused $@");
                     47:   }  
1.7       albertel   48:   return $result
1.2       albertel   49: }
                     50: 
                     51: sub run {
                     52:   my ($code,$safeeval) = @_;
1.3       albertel   53: #  print "inside run\n";
1.7       albertel   54:   $@='';
                     55:   my $result=$safeeval->reval($code);
                     56:   if ($@ ne '') { 
                     57:     &Apache::lonxml::error(":$code:caused"); 
                     58:     &Apache::lonxml::error($@); 
                     59:   }
                     60:   return $result;
1.2       albertel   61: }
                     62: 
                     63: 1;
                     64: __END__;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>