One thing I'd add if you do decide to use the Geo::IP module, it does not behave as documented if it does not find a match. The docs say it returns "undef", but in fact it returns the string "--". The attached patch fixes that problem. I've sent the patch to the GeoIP folks, and got no reply. I'll try sending it to [EMAIL PROTECTED] and see if someone gets it that way :).
Mike
Index: IP.xs =================================================================== RCS file: /usr/local/cvsroot/gkgnsi-support/src/Geo-IP/IP.xs,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- IP.xs 22 Aug 2002 20:30:43 -0000 1.1 +++ IP.xs 22 Aug 2002 20:32:55 -0000 1.2 @@ -39,8 +39,14 @@ country_code_by_addr(gi, addr) GeoIP *gi char * addr + PREINIT: + char * code; CODE: - RETVAL = (char *)GeoIP_country_code_by_addr(gi,addr); + code = (char *)GeoIP_country_code_by_addr(gi,addr); + if (*code == '-') + RETVAL = NULL; + else + RETVAL = code; OUTPUT: RETVAL