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

1.2       albertel    1: package Apache::run;
1.1       sakharuk    2: 
1.2       albertel    3: sub evaluate {
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 {
                     17:       &Apache::lonxml::error("substituion on:$expression:with:$decls:caused");
                     18:     }
                     19:   } else {
                     20:     &Apache::lonxml::error("defining:$expression:caused");
                     21:   }
                     22:   if ($@ ne '') {&Apache::lonxml::error($@);}
                     23:   return $result
1.2       albertel   24: }
                     25: 
                     26: sub run {
                     27:   my ($code,$safeeval) = @_;
1.3       albertel   28: #  print "inside run\n";
1.7       albertel   29:   $@='';
                     30:   my $result=$safeeval->reval($code);
                     31:   if ($@ ne '') { 
                     32:     &Apache::lonxml::error(":$code:caused"); 
                     33:     &Apache::lonxml::error($@); 
                     34:   }
                     35:   return $result;
1.2       albertel   36: }
                     37: 
                     38: 1;
                     39: __END__;

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