Perl Documents,
as created by PPI,
are typically filled with all sorts of mess such as whitespace and comments and other things that don't effect the actual meaning of the code.

In addition,
because there is more than one way to do most things,
and the syntax of Perl itself is quite flexible,
there are many ways in which the "same" code can look quite different.

PPI::Normal attempts to resolve this by providing a variety of mechanisms and algorithms to "normalize" Perl Documents,
and determine a sort of base form for them (although this base form will be a memory structure,
and not something that can be turned back into Perl source code).

The process itself is quite complex,
and so for convenience and extensibility it has been separated into a number of layers.
At a later point,
it will be possible to write Plugin classes to insert additional normalization steps into the various different layers.

In addition,
you can choose to do the normalization only as deep as a particular layer,
depending on aggressively you want the normalization process to be.