#!/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";