When a path is added to the internal list via do, it is stored in the paths attribute as a hashref. The hashref has two keys: path and op. The path is, well, the path. The op is the operation provided to do. As canvases are just lists of paths you should consult the next section as well.

Paths are lists of primitives. Primitives are all descendants of Geometry::Shape and therefore have point_start and point_end. These two attributes allow the chaining of primitives. To draw a path you should iterate over the primitives, drawing each.

When you pull each path from the arrayref you should pull it's accompanying hints via get_hint (the indexes match). The hint may provide you with additional information: