delete broken --self-contained flag from core
[p5sagit/local-lib.git] / lib / lib / core / only.pm
CommitLineData
57ddfe24 1package lib::core::only;
2
3use strict;
4use warnings FATAL => 'all';
5use Config;
6
7sub import {
8 @INC = @Config{qw(privlibexp archlibexp)};
9 return
10}
11
12=head1 NAME
13
14lib::core::only - Remove all non-core paths from @INC to avoid site/vendor dirs
15
16=head1 SYNOPSIS
17
18 use lib::core::only; # now @INC contains only the two core directories
19
20 # To get only the core directories plus the ones for the local::lib in
21 # scope
22
23 $ perl -Mlib::core::only -Mlocal::lib=~/perl5 myscript.pl
24
25=head1 DESCRIPTION
26
27lib::core::only is simply a shortcut to say "please reduce my @INC to only
28the core lib and archlib directories of this perl".
29
30You might want to do this to ensure a local::lib contains only the code you
31need, or to test an L<App::FatPacker|App::FatPacker> tree, or to avoid known
32bad vendor packages.
33
34You might want to use this to try and install a self-contained tree of perl
35modules. Be warned that that probably won't work (see L</CAVEATS>).
36
37This module was extracted from L<local::lib|local::lib>'s --self-contained
38feature, and contains the only part that ever worked. I apologise to anybody
39who thought anything else did.
40
41=head1 CAVEATS
42
43This does B<not> propagate properly across perl invocations like local::lib's
44stuff does. It can't. It's only a module import, so it B<only affects the
45specific perl VM instance in which you load and import() it>.
46
47If you want to cascade it across invocations, you can set the PERL5OPT
48environment variable to '-Mlib::core::only' and it'll sort of work. But be
49aware that taint mode ignores this, so some modules' build and test code
50probably will as well.
51
52You also need to be aware that perl's command line options are not processed
53in order - -I options take effect before -M options, so
54
55 perl -Mlib::core::only -Ilib
56
57is unlike to do what you want - it's exactly equivalent to:
58
59 perl -Mlib::core::only
60
61If you want to combine a core-only @INC with additional paths, you need to
62add the additional paths using -M options and the L<lib|lib> module:
63
64 perl -Mlib::core::only -Mlib=lib
65
66 # or if you're trying to test compiled code:
67
68 perl -Mlib::core::only -Mblib
69
70For more information on the impossibility of sanely propagating this across
71module builds without help from the build program, see
72L<http://www.shadowcat.co.uk/blog/matt-s-trout/tainted-love> - and for ways
73to achieve the old --self-contained feature's results, look at
74L<App::FatPacker|App::FatPacker>'s tree function, and at
75L<App::cpanminus|cpanm>'s --local-lib-contained feature.
76
77=head1 AUTHOR
78
79Matt S. Trout <mst@shadowcat.co.uk>
80
81=head1 LICENSE
82
83This library is free software under the same terms as perl itself.
84
85=head1 COPYRIGHT
86
87(c) 2010 the lib::core::only L</AUTHOR> as specified above.
88
89=cut
90
911;