Otra cosa... el fetchrow_array...
Esta función devuelve una lista de valores, cada una de ellos es cada una de las filas del resultado del SELECT. Al asignar su valor de retorno a una variable escalar ($userip), realmente lo que estás haciendo es guardando el $userip el último valor de esa lista.
Digamos que es completamente legal lo que estás haciendo, si sabes lo que estás haciendo. Pero es poco oscuro para el resto de la gente...
Un poco más claro hubiera sido:
Using perl Syntax Highlighting
my $userip = ($sth->fetchrow_array)[0];
que es decir que nos quedamos con el primer valor de la lista de valores devueltos.