The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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.