This is pretty much what I do, with the following differences:
package Blah;
use strict;
=HEAD1 NAME
...
=cut
BEGIN {
# If I have one
use XXX; # as required here
}
# pragma level 'use's
use vars qw(...);
# Core modules
# CPAN modules
# local modules
# globals and initializing assignments
# actual code at this point
I personally prefer the POD at the top, since it encourages me to write it first and update it first. Keeping it in front of my face as the first thing I see when the editor opens the file helps keep that positive guilty feeling of "you didn't update the POD, did you?" going, with the result that I actually
do update it.