NAME
Acme::AllThePerlIsAStage - Grok perl stages for scripts and modules under use and require–uncompiled and compiled
VERSION
This document describes Acme::AllThePerlIsAStage version 0.01
SYNOPSIS
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
DESCRIPTION
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.
TL;DR
Too Long; Didn’t Run
TODO v0.02 – fill me out (sorry, ran our of time)
stage info
TODO v0.02 – fill me out (sorry, ran our of time)
subroutine info
TODO v0.02 – fill me out (sorry, ran our of time)
our $vars
TODO v0.02 – fill me out (sorry, ran our of time)
my $vars
TODO v0.02 – fill me out (sorry, ran our of time)
INTERFACE
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.
use()/require() compiled/uncompiled
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
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
from a script point of view
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
more verbose:
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
more verbose:
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
DIAGNOSTICS
Throws no warnings or errors of its own.
DEPENDENCIES
None.
INCOMPATIBILITIES
None reported.
This seems useful so why is it in Acme:: instead of Devel::?
I wanted to name it funny and Devel:: is way to serious for that. One of those days I guess :)
BUGS AND LIMITATIONS
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.
AUTHOR
Daniel Muey <http://drmuey.com/cpan_contact.pl>
LICENCE AND COPYRIGHT
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.
DISCLAIMER OF WARRANTY
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.