| … | |
… | |
| 1177 | =cut |
1177 | =cut |
| 1178 | |
1178 | |
| 1179 | |
1179 | |
| 1180 | sub grade_problem { |
1180 | sub grade_problem { |
| 1181 | my $self = shift; |
1181 | my $self = shift; |
| 1182 | my %form_options = @_; |
1182 | no strict; |
|
|
1183 | local %rf_options = @_; |
| 1183 | my $rf_grader = $self->{rf_problem_grader}; |
1184 | local $rf_grader = $self->{rf_problem_grader}; |
|
|
1185 | local $rh_answers = $self->{rh_evaluated_answers}; |
|
|
1186 | local $rh_state = $self->{rh_problem_state}; |
|
|
1187 | $self->{safe}->share('$rf_grader','$rh_answers','$rh_state','%rf_options'); |
| 1184 | ($self->{rh_problem_result},$self->{rh_problem_state} ) = |
1188 | ($self->{rh_problem_result},$self->{rh_problem_state}) = |
| 1185 | &{$rf_grader}( $self -> {rh_evaluated_answers}, |
1189 | $self->{safe}->reval('&{$rf_grader}($rh_answers,$rh_state,%rf_options)'); |
| 1186 | $self -> {rh_problem_state}, |
1190 | use strict; |
| 1187 | %form_options |
1191 | die $@ if $@; |
| 1188 | ); |
|
|
| 1189 | |
|
|
| 1190 | ($self->{rh_problem_result}, $self->{rh_problem_state} ) ; |
1192 | ($self->{rh_problem_result}, $self->{rh_problem_state}); |
| 1191 | } |
1193 | } |
| 1192 | |
1194 | |
| 1193 | sub rf_std_problem_grader { |
1195 | sub rf_std_problem_grader { |
| 1194 | my $self = shift; |
1196 | my $self = shift; |
| 1195 | return \&std_problem_grader; |
1197 | return \&std_problem_grader; |