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:

Noël 25 
Ben 76
Clementine 49
Norm 66
Chris 92
Doug 42
Carol 25
Ben 12
Clementine 0
Norm 66

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

Popular posts from this blog

solved ERROR You installed yt-dlp from a manual build or with a package manager

lanix neuron a v20

The type or namespace name 'Builder' does not exist in the namespace 'System.CommandLine'