Overall nice code minus the comments - but there have been enough comments about the comments so I refrain from commenting on that :)

I'd restructure the loop for reading in the input file a bit:

use List::Util qw/sum/; while( <INPUT> ) { next if /^$/; my ($first, $last, @grades) = split; my $name_index = "$last,$first"; my $avg_grade = sum(@grades) / scalar(@grades); $students{$name_index}{grades} = \@grades; $students{$name_index}{avg_grade} = $avg_grade; push @averages, $avg_grade; }
As you can see, I split the line directly into the needed parts. Furthermore the variable only needed in this loop are declared inside the loop - this locality gives less chances for mistakes.

I don't know whether you are allowed to use modules to solve your exercise - but the sum subroutine from List::Util comes in handy here. Otherwise you could just program the sub yourself. I don't see any point in rounding the results you push into @averages. You are only using this internally and why not calculate with the whole precision you have available - thus simplifying the code. You could still do the rounding when you print something out.

A final remark to a differnt part of the code, this: my $i = sprintf("%d", scalar(@averages) / 2 ); could be better written as my $i = int( scalar(@averages)/2 ); Both do rounding towards zero.

-- Hofmator


In reply to Re: Style and Coding criticism requested by Hofmator
in thread Style and Coding criticism requested by inelukii

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.