in reply to Need to check my understanding of this code...

line 4: yes, your assumption is correct -- $max_so_far is a scalar .. These two lines are equivalent:
my($max_so_far) = shift @_; my $max_so_far = shift @_;
You can, however, declare several scalars at the same time, in which case you use the parens:
my ($x, $y, $x) = (1, 2, 3);
As for line 10, yes, that last line does the same as return $max_so_far; (which would have been more explicit). From perldoc -f perlsub: "The return value of a subroutine is the value of the last expression evaluated."
Trying it with line 10 commented out, $maximum is undef .. i tried w/the max value last in the list, too, so i supsect it's not the last "if", but that the undef comes from the loop termination..