B::Deparse is a backend module for the Perl compiler that generates perl
source code, based on the internal compiled structure that perl itself
creates after parsing a program. The output of B::Deparse won't be exactly
the same as the original source, since perl doesn't keep track of comments
or whitespace, and there isn't a one-to-one correspondence between perl's
syntactical constructions and their compiled form, but it will often be
close. When you use the -p
option, the output also includes parentheses even when they are not
required by precedence, which can make it easy to see if perl is parsing
your expressions the way you intended.

Please note that this module is mainly new and untested code and is still
under development, so it may change in the future.

Print extra parentheses. Without this option, B::Deparse includes
parentheses in its output only when they are needed, based on the structure
of your program. With -p, it uses parentheses (almost) whenever they would be legal. This can be useful if you are used to
LISP, or if you want to see how perl parses your input. If you say

Normally, B::Deparse deparses the main code of a program, all the subs called by the main program (and all the subs called by them, recursively), and any other subs in the main:: package. To include subs in other packages that aren't called directly, such as
AUTOLOAD,DESTROY, other subs called automatically by perl, and methods, which aren't resolved to subs until runtime, use the
-u option. The argument to -u is the name of a package, and should follow directly after the 'u'.
Multiple -u options may be given, separated by commas. Note that unlike some other
backends, B::Deparse doesn't (yet) try to guess automatically when -u is needed -- you must invoke it yourself.