Commit | Line | Data |
57ddfe24 |
1 | package lib::core::only; |
2 | |
3 | use strict; |
4 | use warnings FATAL => 'all'; |
5 | use Config; |
6 | |
7 | sub import { |
8 | @INC = @Config{qw(privlibexp archlibexp)}; |
9 | return |
10 | } |
11 | |
12 | =head1 NAME |
13 | |
14 | lib::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 | |
27 | lib::core::only is simply a shortcut to say "please reduce my @INC to only |
28 | the core lib and archlib directories of this perl". |
29 | |
30 | You might want to do this to ensure a local::lib contains only the code you |
31 | need, or to test an L<App::FatPacker|App::FatPacker> tree, or to avoid known |
32 | bad vendor packages. |
33 | |
34 | You might want to use this to try and install a self-contained tree of perl |
35 | modules. Be warned that that probably won't work (see L</CAVEATS>). |
36 | |
37 | This module was extracted from L<local::lib|local::lib>'s --self-contained |
38 | feature, and contains the only part that ever worked. I apologise to anybody |
39 | who thought anything else did. |
40 | |
41 | =head1 CAVEATS |
42 | |
43 | This does B<not> propagate properly across perl invocations like local::lib's |
44 | stuff does. It can't. It's only a module import, so it B<only affects the |
45 | specific perl VM instance in which you load and import() it>. |
46 | |
47 | If you want to cascade it across invocations, you can set the PERL5OPT |
48 | environment variable to '-Mlib::core::only' and it'll sort of work. But be |
49 | aware that taint mode ignores this, so some modules' build and test code |
50 | probably will as well. |
51 | |
52 | You also need to be aware that perl's command line options are not processed |
53 | in order - -I options take effect before -M options, so |
54 | |
55 | perl -Mlib::core::only -Ilib |
56 | |
57 | is unlike to do what you want - it's exactly equivalent to: |
58 | |
59 | perl -Mlib::core::only |
60 | |
61 | If you want to combine a core-only @INC with additional paths, you need to |
62 | add 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 | |
70 | For more information on the impossibility of sanely propagating this across |
71 | module builds without help from the build program, see |
72 | L<http://www.shadowcat.co.uk/blog/matt-s-trout/tainted-love> - and for ways |
73 | to achieve the old --self-contained feature's results, look at |
74 | L<App::FatPacker|App::FatPacker>'s tree function, and at |
75 | L<App::cpanminus|cpanm>'s --local-lib-contained feature. |
76 | |
77 | =head1 AUTHOR |
78 | |
79 | Matt S. Trout <mst@shadowcat.co.uk> |
80 | |
81 | =head1 LICENSE |
82 | |
83 | This 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 | |
91 | 1; |