fixed sintax error near $grades{$student}
SOLUCIÓN Debido al pragma use strict, declarar bien el ámbito de las variables.
Programming Perl 3rd ed. Chapter 1 - En mi caso, uso perlbrew, de modo que ejecuto el script vía perl ./gradation.pl sin darle atributos de ejecución previamente.
Contenido del archivo grades.txt:
Código del script gradation.pl:
#!/usr/bin/env perl # because perlbrew
# perl ./gradation.pl without using chmod u+x gradation.pl
use strict;
use warnings;
use autodie;
use diagnostics;
my $line;
my $student;
my $grade;
#my $grades;
my %grades;
my $scores;
my $total;
my @grades;
my $average;
my $grades_fh;
my $filename = 'grades.txt';
# open(GRADES,"grades.txt") or die("Cant open grades.txt:$!\n");
# Use a lexical file handle '$grades_fh' instead of 'GRADES'
open($grades_fh, '<', $filename) or die "Can't open $filename: $!\n";
while ($line = <$grades_fh>) {
($student, $grade) = split(" ",$line);
$grades{$student} .= $grade . " "; # dot eq symbol is appending
}
foreach $student (sort keys %grades) {
$scores = 0;
$total = 0;
@grades = split(" ",$grades{$student});
foreach $grade (@grades) {
$total += $grade;
$scores++;
}
$average = $total / $scores;
print("$student: $grades{$student}\tAverage: $average\n");
}
# The file handle is automatically closed when the program ends,
# but can be explicitly closed with:
close($grades_fh) or die "Can't close $filename: $!\n";
Obteniendo la salida:
Ben: 76 12 Average: 44
Carol: 25 Average: 25
Chris: 92 Average: 92
Clementine: 49 0 Average: 24.5
Doug: 42 Average: 42
Norm: 66 66 Average: 66
Noël: 25 Average: 25
Comments
Post a Comment
Under your writing