From: dpvc v. a. <we...@ma...> - 2009-10-01 22:22:46
|
Log Message: ----------- Handle arbitrary variable names Modified Files: -------------- pg/lib: Parser.pm pg/lib/Parser: Variable.pm Revision Data ------------- Index: Parser.pm =================================================================== RCS file: /webwork/cvs/system/pg/lib/Parser.pm,v retrieving revision 1.55 retrieving revision 1.56 diff -Llib/Parser.pm -Llib/Parser.pm -u -r1.55 -r1.56 --- lib/Parser.pm +++ lib/Parser.pm @@ -718,13 +718,24 @@ $vars = [sort(keys %{$self->{variables}})] unless $vars; $vars = [$vars] unless ref($vars) eq 'ARRAY'; my $n = scalar(@{$vars}); my $vnames = ''; my %isArg; + my $variables = $self->context->variables; if ($n > 0) { my @v = (); - foreach my $x (@{$vars}) {CORE::push(@v,"\$".$x); $isArg{$x} = 1} + foreach my $x (@{$vars}) { + my $perl = $variables->get($x)->{perl} || "\$".$x; + substr($perl,1) =~ s/([^a-z0-9_])/"_".ord($1)/ge; + CORE::push(@v,$perl); + $isArg{$x} = 1; + } $vnames = "my (".join(',',@v).") = \@_;"; } - foreach my $x (keys %{$self->{variables}}) - {$vnames .= "\n my \$$x = main::Formula('$x');" unless $isArg{$x}} + foreach my $x (keys %{$self->{variables}}) { + unless ($isArg{$x}) { + my $perl = $variables->get($x)->{perl} || "\$".$x; + substr($perl,1) =~ s/([^a-z0-9_])/"_".ord($1)/ge; + $vnames .= "\n my $perl = main::Formula('$x');"; + } + } my $context = $self->context; my $fn = eval "package main; Index: Variable.pm =================================================================== RCS file: /webwork/cvs/system/pg/lib/Parser/Variable.pm,v retrieving revision 1.14 retrieving revision 1.15 diff -Llib/Parser/Variable.pm -Llib/Parser/Variable.pm -u -r1.14 -r1.15 --- lib/Parser/Variable.pm +++ lib/Parser/Variable.pm @@ -116,8 +116,9 @@ my $self = shift; my $value = $self->{equation}{values}{$self->{name}}; return $value if defined($value); - return $self->{def}{perl} if defined $self->{def}{perl}; - return '$'.$self->{name}; + my $perl = $self->{def}{perl} || '$'.$self->{name}; + substr($perl,1) =~ s/([^a-z0-9_])/"_".ord($1)/ge; + return $perl; } ######################################################################### |