Annotation of loncom/homework/templates/sampleexternal.pl, revision 1.1

1.1     ! www         1: #!/usr/bin/perl
        !             2: $|=1;
        !             3: 
        !             4: use Safe;
        !             5: use strict;
        !             6: 
        !             7: #
        !             8: # Sample evaluation script for externalresponse
        !             9: # If you do this for real, this script should be on another server.
        !            10: # On that server, it could do anything: run simulations, access databases, run Java, etc, etc.
        !            11: # Make sure, though, that the student submissions cannot crash or destroy your server.
        !            12: # This sample script just runs the student code in a Perl safe environment to show how this works.
        !            13: #
        !            14: 
        !            15: # Header
        !            16: print "Content-type: text/html\n\n";
        !            17: 
        !            18: # Load POST variables into hash %FORM
        !            19: my %FORM=();
        !            20: my $buffer;
        !            21: read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
        !            22: foreach my $pair (split(/&/, $buffer)) {
        !            23:    my ($name, $value) = split(/=/, $pair);
        !            24:    $value =~ tr/+/ /;
        !            25:    $value =~ s/%(..)/pack("C", hex($1))/eg;
        !            26:    $FORM{$name} = $value;
        !            27: }
        !            28: 
        !            29: #
        !            30: # ==== This is where your logic needs to be implemented
        !            31: #
        !            32: 
        !            33: # Ready to do stuff
        !            34: # Do this in a Safe compartment
        !            35: 
        !            36: my $compartment = new Safe;
        !            37: 
        !            38: # First assume that everything is wonderful 
        !            39: 
        !            40: my $award='EXACT_ANS';
        !            41: my $message='';
        !            42: 
        !            43: #
        !            44: # Passing test cases in the format argument=result,argument=result,...
        !            45: # 
        !            46: foreach my $testcase (split(/\,/,$FORM{'LONCAPA_correct_answer'})) {
        !            47:    my ($value,$result)=split(/\=/,$testcase);
        !            48: # Execute the student code and call the expected function
        !            49:    my $studentanswer=$compartment->reval($FORM{'LONCAPA_student_response'}.'&factorial('.$value.')');
        !            50: # A syntax error occurred
        !            51:    if ($@) {
        !            52:       $award='WRONG_FORMAT';
        !            53:       $message='Syntax error: '.$@;
        !            54:       last;
        !            55:    }
        !            56: # The result is not correct for a test case
        !            57:    unless ($studentanswer==$result) {
        !            58:       $award='INCORRECT';
        !            59:       $message="Returned wrong result.";
        !            60:       last;
        !            61:    }   
        !            62: }
        !            63: 
        !            64: #
        !            65: # ==== The remainder is sending results $award and $message back to LON-CAPA
        !            66: #
        !            67: 
        !            68: # Send result back to LON-CAPA in standard format
        !            69: # Possible responses
        !            70: # 'EXTRA_ANSWER','MISSING_ANSWER', 'ERROR',
        !            71: # 'NO_RESPONSE',
        !            72: # 'TOO_LONG', 'UNIT_INVALID_INSTRUCTOR',
        !            73: # 'UNIT_INVALID_STUDENT', 'UNIT_IRRECONCIBLE',
        !            74: # 'UNIT_FAIL', 'NO_UNIT',
        !            75: # 'UNIT_NOTNEEDED', 'WANTED_NUMERIC',
        !            76: # 'BAD_FORMULA', 'NOT_FUNCTION', 'WRONG_FORMAT',
        !            77: # 'INTERNAL_ERROR', 'SIG_FAIL', 'INCORRECT',
        !            78: # 'MISORDERED_RANK', 'INVALID_FILETYPE',
        !            79: # 'EXCESS_FILESIZE', 'FILENAME_INUSE',
        !            80: # 'DRAFT', 'SUBMITTED', 'SUBMITTED_CREDIT',
        !            81: # 'ANONYMOUS', 'ANONYMOUS_CREDIT',
        !            82: # 'ASSIGNED_SCORE', 'APPROX_ANS',
        !            83: # 'EXACT_ANS','COMMA_FAIL'
        !            84: #
        !            85: # plus a free-form $message.
        !            86: 
        !            87: 
        !            88: print (<<ENDOUT);
        !            89: <loncapagrade>
        !            90:     <awarddetail>$award</awarddetail>
        !            91:     <message>$message</message>
        !            92: </loncapagrade>
        !            93: ENDOUT
        !            94: exit;

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