Acme::AllThePerlIsAStage - Grok perl stages for scripts and modules under use and require–uncompiled and compiled
This document describes Acme::AllThePerlIsAStage version 0.01
Compare output points to see what-happens-when in order to understand why and decide on what to do:
perl -e 'use Acme::AllThePerlIsAStage;' perl -e 'use Acme::AllThePerlIsAStage;' perlcc -e 'use Acme::AllThePerlIsAStage;' -o tmp/use ./tmp/use ./tmp/use perl -e 'use Acme::AllThePerlIsAStage ();' perl -e 'use Acme::AllThePerlIsAStage ();' perlcc -e 'use Acme::AllThePerlIsAStage;' -o tmp/use_no_import ./tmp/use_no_import ./tmp/use_no_import perl -e 'require Acme::AllThePerlIsAStage;' perl -e 'require Acme::AllThePerlIsAStage;' perlcc -e 'require Acme::AllThePerlIsAStage;' -o tmp/req ./tmp/req ./tmp/req
Sometimes the stages involved in perl’s execution can be hard to grasp. It gets even hairier when you start compiling your code.
When trying to explain and then demonstrate what was happening I found myself writing scripts and modules to output what perl is doing where in order to find out if my understanding lined up with reality. Then to see how reality held up once compiled with perlcc.
Finally, making a set up every few months got old and I thought I’d put it all on CPAN for the masses to enjoy/ignore.
Too Long; Didn’t Run
TODO v0.02 – fill me out (sorry, ran our of time)
Just use or require the module. It outputs info you can use to visualize and study in order to grok "BEGIN, UNITCHECK, CHECK, INIT and END" in perlmod.
If the environment variable 'AllThePerlIsAStage_verbose' is true it outputs info on various symbols at each point in the process.
more verbose:
AllThePerlIsAStage_verbose=1 perl -e 'use Acme::AllThePerlIsAStage;' AllThePerlIsAStage_verbose=1 perl -e 'use Acme::AllThePerlIsAStage;' perlcc -e 'use Acme::AllThePerlIsAStage;' -o tmp/use AllThePerlIsAStage_verbose=1 ./tmp/use AllThePerlIsAStage_verbose=1 ./tmp/use AllThePerlIsAStage_verbose=1 perl -e 'use Acme::AllThePerlIsAStage ();' AllThePerlIsAStage_verbose=1 perl -e 'use Acme::AllThePerlIsAStage ();' perlcc -e 'use Acme::AllThePerlIsAStage;' -o tmp/use_no_import AllThePerlIsAStage_verbose=1 ./tmp/use_no_import AllThePerlIsAStage_verbose=1 ./tmp/use_no_import AllThePerlIsAStage_verbose=1 perl -e 'require Acme::AllThePerlIsAStage;' AllThePerlIsAStage_verbose=1 perl -e 'require Acme::AllThePerlIsAStage;' perlcc -e 'require Acme::AllThePerlIsAStage;' -o tmp/req AllThePerlIsAStage_verbose=1 ./tmp/req AllThePerlIsAStage_verbose=1 ./tmp/req
There are script's in the module’s share/ dir (not installed on your system but they are there if you want them).
To see what it looks like when use()d from a script, compare:
./and_one_man_in_his_time_plays_many_parts.pl ./and_one_man_in_his_time_plays_many_parts.pl perlcc ./and_one_man_in_his_time_plays_many_parts.pl -o and_one_man_in_his_time_plays_many_parts ./and_one_man_in_his_time_plays_many_parts ./and_one_man_in_his_time_plays_many_parts
AllThePerlIsAStage_verbose=1 ./and_one_man_in_his_time_plays_many_parts.pl AllThePerlIsAStage_verbose=1 ./and_one_man_in_his_time_plays_many_parts.pl AllThePerlIsAStage_verbose=1 perlcc ./and_one_man_in_his_time_plays_many_parts.pl -o and_one_man_in_his_time_plays_many_parts AllThePerlIsAStage_verbose=1 ./and_one_man_in_his_time_plays_many_parts AllThePerlIsAStage_verbose=1 ./and_one_man_in_his_time_plays_many_parts
To see what it looks like when require()d from a script, compare:
./they_have_their_exits_and_their_entrances.pl ./they_have_their_exits_and_their_entrances.pl perlcc ./they_have_their_exits_and_their_entrances.pl -o they_have_their_exits_and_their_entrances ./they_have_their_exits_and_their_entrances ./they_have_their_exits_and_their_entrances
AllThePerlIsAStage_verbose=1 ./they_have_their_exits_and_their_entrances.pl AllThePerlIsAStage_verbose=1 ./they_have_their_exits_and_their_entrances.pl AllThePerlIsAStage_verbose=1 perlcc ./they_have_their_exits_and_their_entrances.pl -o they_have_their_exits_and_their_entrances AllThePerlIsAStage_verbose=1 ./they_have_their_exits_and_their_entrances AllThePerlIsAStage_verbose=1 ./they_have_their_exits_and_their_entrances
Throws no warnings or errors of its own.
None.
None reported.
I wanted to name it funny and Devel:: is way to serious for that. One of those days I guess :)
No bugs have been reported.
Please report any bugs or feature requests to bug-acme-alltheperlisastage@rt.cpan.org, or through the web interface at http://rt.cpan.org.
bug-acme-alltheperlisastage@rt.cpan.org
Daniel Muey <http://drmuey.com/cpan_contact.pl>
<http://drmuey.com/cpan_contact.pl>
Copyright (c) 2015, Daniel Muey <http://drmuey.com/cpan_contact.pl>. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
To install Acme::AllThePerlIsAStage, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Acme::AllThePerlIsAStage
CPAN shell
perl -MCPAN -e shell install Acme::AllThePerlIsAStage
For more information on module installation, please visit the detailed CPAN module installation guide.