in reply to help w/hash arrays

Things would be easier to understand if you replaced the @fields array elements with equivalent scalar values.

Assume that the following has been entered:

my ($x,$y,$z) = @fields; # to simplify matters # Now, your statement can be written as : $students{$x}->[$y] = $z;
%students is NOT an anonymous hash ref - it has a name - students. It is not a ref (it is a hash), and its values are references to anonymous arrays.

So, if you asked for $students{$x} , you would get a refernence to an anonymous array. You de-reference this with the optional "->" operator, then index the array with [$y]. Finally, you assign $z to the indexed array.

Hope this lifts the fog somewhat.

Offense, like beauty, is in the eye of the beholder, and a fantasy.
By guaranteeing freedom of expression, the First Amendment also guarntees offense.