I'm glad to see that you're using strict.pm.
Your code is overcommented. Stuff like:
my $median_class_avg; #-- median class average ... #-- Open the input file open(INPUT, '<', $input_file) or die "Couldn't open $input_file: $!\n" +; ... #-- Print student's average printf "%5.1f%2s", $students{$name}{avg_grade};
is worse than redundant: it's distracting, and if the code changes, it's a good bet that the comment won't (which is pretty confusing to all concerned). Your code's pretty well written anyways, so you can probably just remove most of the comments without harming readability.
This loop could be rewritten from
foreach ( 0 .. $#{ $students{$name}{grades} } ) { printf "%4d", $students{$name}{grades}[$_]; }
to
foreach $grade (@{$students{$name}{grades}}) { printf "%4d", $grade; }
which is not only clearer, but avoids indexing errors.
Actually, that brings up a good point: I find it easier to pull out nested references explicitly, like so:
my @grades = $students{$name}{grades}; foreach my $grade (@grades) { printf "%4d", $grade; }
Those complaints aside, this is pretty well-written code.
--
F
o
x
t
r
o
t
U
n
i
f
o
r
m
Found a typo in this node? /msg me
The hell with paco, vote for Erudil!
In reply to Re: Style and Coding criticism requested
by FoxtrotUniform
in thread Style and Coding criticism requested
by inelukii
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |