I've found Geo::Gpx is a handy module for slurping GPX traces generated by my Garmin GPS, munge them some, and output JSON for easy use in my mapping apps in the front-end. It has logical data structures to represent the GPX, and doesn't over-engineer the solution -- arguably Tracks, Waypoints and Routes could be objects to support more functionality, but there's no need for it as it stands, and there's no reason it couldn't be refactored in the future if need be.
A few small gripes: it would be nice to have some sort of search functionality for points built-in (eg: search within a bounding-box, find points at a certain elevation or on a certain date, etc), and it would be nice to support JSON. Hopefully <a href="rt.cpan.org/Ticket/Display.html?id=34...; will sort the latter. The rest you'll have to do yourself, but at least Geo::Gpx takes away the mundane task of processing/creating the XML.