I suggest using

Triangle (offsite link) to mesh your data, then load the resultant undirected graph into the

Graph module, then do whatever work needs to be done. Triangle will handle whatever challenges your data has, unless it doesn't, in which case you can clean up the data on the way in to Triangle. If you can't clean it up, you will have a research project on your hands.

This is an example where floating point numbers can be a problem. For example, consider three lines that intersect at a single point. Due to floating point errors, this tends to generate a tiny triangle instead of a single point intersection. Issues such as this are covered in the Triangle documentation.

*It should work perfectly the first time! - toma*

Comment onRe: Better maps with Math::Geometry::Voronoi, and a Challenge for Math Monks