It has a main dispatcher method, visit, which takes a single perl value and then calls the methods appropriate for that value.

It can recursively map (cloning as necessary) or just traverse most structures, with support for per object behavior, circular structures, visiting tied structures, and all ref types (hashes, arrays, scalars, code, globs).

When tied_as_objects is enabled and a tied variable (hash, array, glob or scalar) is encountered this method will be called on the tied object. If a valid mapped value is returned, the newly constructed result container will be tied to the return value and no iteration of the contents of the data will be made (since all storage is delegated to the tied object).

If a non blessed value is returned from visit_tied then the structure will be iterated normally, and the result container will not be tied at all.

This is because tying to the same class and performing the tie operations will not yield the same results in many cases.