Often out of curiosity, and perhaps due to an acute case of extreme boredom, I like to see what is going on behind the scene, e.g. within the deepest internals of good old perl.
Take for example the number and type of perl modules being loaded from a single use
statement.
Since I've been playing alot with Moose
lately, I'll use that as an example.
Roll up sleeves, cross your finger and fire up a terminal session and enter the following command:
$ perl -e 'use Moose; print join("\n", sort keys %INC)'
Lo and behold you will see a list of seventy-seven or some appear before your eyes:
Moose does not export its sugar to the 'main' package. AutoLoader.pm B.pm Carp.pm Carp/Heavy.pm Class/MOP.pm Class/MOP/Attribute.pm ... overload.pm re.pm strict.pm vars.pm warnings.pm warnings/register.pm
If you try Catalyst
instead of Moose
, the list will be even longer (169).
So what am I trying to prove? Not much I guess except for the fact that perl allows you to acquire much interesting insight with it's wonderful world of one-liners.
(What does the very first line 'Moose does not export its sugar to the 'main' package.'
really mean?)
See Perl Medic by Peter J. Scott for an excellent read.
Saying 'use Moose' whilst in package main (i.e. in a simple script) is probably not what you want (as Moose is for building classes, and having a class called 'main' is a bad idea, as it already has a special meaning for perl).
Ergo, if you use Moose in main then none of the Moose sugar (such as the keywords 'has', 'with' etc) are exported..
You want to either say:
perl -e'use Moose ();' # Explicitly doesn't import anything.
or
perl -Moose -e'#CODE' # use 'oose', Moose for one liners ;)
I can see what you mean and perhaps I should have been more precise.
As it turns out, I just made a 'quick stab' at things to get a general ballpark indication, e.g. the use of 'use' pulls in alot of hidden stuff one should be aware of.