$ENV{HTTP_X_FORWADER_FOR} так же стоит проверять. А лучше вообще использовать конструкцию вида:
my $remote_ip=$ENV{\'REMOTE_ADDR\'} ? $ENV{\'REMOTE_ADDR\'} : $ENV{\'HTTP_X_FORWARDED_FOR\'};
Потому что в поле REMOTE_ADDR может ничего не передаватся (к примеру если работа идет через прокси)