--- loncom/xml/run.pm 2004/03/31 05:24:00 1.46
+++ loncom/xml/run.pm 2006/01/11 08:52:58 1.55
@@ -1,6 +1,6 @@
package Apache::run;
#
-# $Id: run.pm,v 1.46 2004/03/31 05:24:00 albertel Exp $
+# $Id: run.pm,v 1.55 2006/01/11 08:52:58 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -46,7 +46,27 @@ while (!$_LONCAPA_INTERNAL_oldexpression
# only match the above if there is not { [ ( coming up
# Why? (I.e. this fails &a(1)[2]
(?=[^\[\{\(]|$)/
- &__LC_INTERNAL_EVALUATE__($1,$2,$3)/sexg;
+ my ($__LC__a,$__LC__b,$__LC__c)=($1,$2,$3);
+ my $__LC__prefix;
+ my $__LC__result;
+ while (1) {
+ if ($__LC__a =~ m-^&(theta|i|pi|rho)-) { last; }
+ {
+ use strict;
+ no strict "vars";
+ if (eval(defined(eval($__LC__a.$__LC__b)))) {
+ $__LC__result= $__LC__prefix.eval($__LC__a.$__LC__b.$__LC__c);
+ last;
+ }
+ }
+ $__LC__prefix.=substr($__LC__a,0,1,"");
+ if ($__LC__a!~m-^(\$|&|\#)-) { last; }
+ }
+ if (!defined($__LC__result)) {
+ $__LC__result=$__LC__prefix.$__LC__a.$__LC__b.$__LC__c;
+ }
+ $__LC__result;
+ /sexg;
if (scalar(values(%_LONCAPA_INTERNAL_oldexpressions))>10) {last;}
}
ENDEVALUATE
@@ -64,13 +84,13 @@ sub evaluate {
};
my $innererror;
eval {
- alarm($Apache::lonnet::perlvar{'lonScriptTimeout'});
+ &Apache::lonxml::start_alarm();
$safeeval->reval('{'.$decls.';$_=<<\'EXPRESSION\';'."\n".$expression.
"\n".'EXPRESSION'."\n".$EVALUATE_STRING.'}');
$innererror=$@;
- alarm(0);
+ &Apache::lonxml::end_alarm();
};
- my $error=$@;
+ my $error=$@;
if ($error eq '' && $innererror eq '' && !$Apache::run::timeout) {
$result = $safeeval->reval('return $_;');
chomp $result;
@@ -102,10 +122,10 @@ sub run {
};
my $innererror;
eval {
- alarm($Apache::lonnet::perlvar{'lonScriptTimeout'});
+ &Apache::lonxml::start_alarm();
@result=$safeeval->reval($code);
$innererror=$@;
- alarm(0);
+ &Apache::lonxml::end_alarm();
};
my $error=$@;
if (($Apache::run::timeout || $error ne '' || $innererror ne '') && !$hideerrors) {
@@ -138,22 +158,29 @@ sub dump {
my ($target,$safeeval)=@_;
my $dump='';
foreach my $symname (sort keys %{$safeeval->varglob('main::')}) {
- if (($symname!~/^\_/) && ($symname!~/\:$/)) {
+ if (($symname!~ /^(INC|SIG)/) && ($symname!~/\027/) &&
+ ($symname!~/^\_/) && ($symname!~/\:$/)) {
my $line;
if ($safeeval->reval('defined($'.$symname.')')) {
- $line='$'.$symname.'='.$safeeval->reval('$'.$symname);
+ if ($symname =~ /^\w/) {
+ $line.='$'.$symname.'='.$safeeval->reval('$'.$symname)."\n";
+ }
}
if ($safeeval->reval('defined(@'.$symname.')')) {
- $line='@'.$symname.'=('.
- $safeeval->reval('join(",",@'.$symname.')').")";
+ $line.='@'.$symname.'=('.
+ $safeeval->reval('join(",",@'.$symname.')').")"."\n";
}
if ($safeeval->reval('defined(%'.$symname.')')) {
- $line='%'.$symname.'=(';
+ $line.='%'.$symname.'=(';
$line.=$safeeval->reval('join(",",map { $_."=>".$'.
$symname.'{$_} } sort keys %'.
- $symname.')').")"
- }
- if ($line ne '') {$dump.=&HTML::Entities::encode($line,'<>&"')."
";}
+ $symname.')').")"."\n";
+ }
+ if ($line ne '') {
+ $line=&HTML::Entities::encode($line,'<>&"');
+ $line=~s|\n|
|g;
+ $dump.=$line;
+ }
}
}
$dump.='';