I'm updating Geo::GeoNames, and my fork is on Github. I have a bunch of geo-coordinates where I want to know the country or city names so I can easily remember why I have those coordinates and tell them apart from the other coordinates.
Since it's last release, GeoNames changed the web services address and started requiring a username (which you can get for free). Once you respond to the email and enable free access on your account, you are ready to go. I've updated that.
The tests pass, at least for me. Many of the current failures come from the outdated interface before GeoNames required usernames. There's some tests that I've made TODO until I care about those features. If you'd like something that isn't supported, send a pull request.
I don't know if the current module handles all of the search types. I'm not particularly interested in making it definitive as long as it has the stuff I need. When other people need unsupported types, they can add those too. If there is someone who is motivated to maintain Geo::GeoNames long term, I can make co-maintainters.