in reply to remote_user not identifing user

Just as a note, there are two ways to use CGI.
  1. Object-oriented mode, where you have a query object and you use it to do all your dirty work
  2. Non-object-oriented mode (i.e. procedural), where you import the functions and use them directly
While there are presumably some perverse applications where using both methods simultaneously is advantageous, your script is not one of them. Since you are using OO mode in your code, the import parameter to use CGI is strictly unnecessary, and some would argue, "cargo cult programming". The ":standard" tag means to import the standard HTML functions. It does not mean to use "standard CGI".

Object-Oriented:
use CGI; my $q = new CGI; print $q->header(); my $v = $q->param('v'); # etc...
Procedural:
use CGI qw[ :standard ]; print header(); my $v = param('v'); # etc...
Nary should the two be confused.