use File::Spec ();
use Config;
-our $VERSION = '1.008026'; # 1.8.26
+our $VERSION = '2.000003'; # 2.0.3
$VERSION = eval $VERSION;
sub import {
$value =~ s/(^|\G|$_path_sep)\$$name$_path_sep/$1\$$name\${$name+$_path_sep}/g;
$value =~ s/$_path_sep\$$name$/\${$name+$_path_sep}\$$name/;
- qq{export ${name}="$value";\n}
+ qq{${name}="$value";\nexport ${name};\n}
}
sub build_csh_env_declaration {
}
}
-=begin testing
-
-#:: test pipeline
-
-package local::lib;
-
-{ package Foo; sub foo { -$_[1] } sub bar { $_[1]+2 } sub baz { $_[1]+3 } }
-my $foo = bless({}, 'Foo');
-Test::More::ok($foo->${pipeline qw(foo bar baz)}(10) == -15);
-
-=end testing
-
-=cut
-
sub resolve_path {
my ($class, $path) = @_;
}
}
-=begin testing
-
-#:: test classmethod setup
-
-my $c = 'local::lib';
-
-=end testing
-
-=begin testing
-
-#:: test classmethod
-
-is($c->resolve_empty_path, '~/perl5');
-is($c->resolve_empty_path('foo'), 'foo');
-
-=end testing
-
-=cut
-
sub resolve_home_path {
my ($class, $path) = @_;
return $path unless ($path =~ /^~/);
$path = File::Spec->rel2abs($path);
}
-=begin testing
-
-#:: test classmethod
-
-local *File::Spec::rel2abs = sub { shift; 'FOO'.shift; };
-is($c->resolve_relative_path('bar'),'FOObar');
-
-=end testing
-
-=cut
-
sub ensure_dir_structure_for {
my ($class, $path) = @_;
unless (-d $path) {
return;
}
-=begin testing
-
-#:: test classmethod
-
-File::Path::rmtree('t/var/splat');
-
-$c->ensure_dir_structure_for('t/var/splat');
-
-ok(-d 't/var/splat');
-
-=end testing
-
-=cut
-
sub guess_shelltype {
my $shellbin
= defined $ENV{SHELL}
export PERL5LIB="/home/username/perl5/lib/perl5"
export PATH="/home/username/perl5/bin:$PATH"
+From a .bashrc file -
+
+ [ $SHLVL -eq 1 ] && eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
+
=head2 The bootstrapping technique
A typical way to install local::lib is using what is known as the
Windows users must also see L</Differences when using this module under Win32>.
-1. Download and unpack the local::lib tarball from CPAN (search for "Download"
+=over 4
+
+=item 1.
+
+Download and unpack the local::lib tarball from CPAN (search for "Download"
on the CPAN page about local::lib). Do this as an ordinary user, not as root
or administrator. Unpack the file in your home directory or in any other
convenient location.
-2. Run this:
+=item 2.
+
+Run this:
perl Makefile.PL --bootstrap
perl Makefile.PL --bootstrap=~/foo
-3. Run this: (local::lib assumes you have make installed on your system)
+=item 3.
+
+Run this: (local::lib assumes you have make installed on your system)
make test && make install
-4. Now we need to setup the appropriate environment variables, so that Perl
+=item 4.
+
+Now we need to setup the appropriate environment variables, so that Perl
starts using our newly generated lib/ directory. If you are using bash or
any other Bourne shells, you can add this to your shell startup script this
way:
- echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc
+ echo '[ $SHLVL -eq 1 ] && eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"' >>~/.bashrc
If you are using C shell, you can do this as follows:
give that as import parameter to the call of the local::lib module like this
way:
- echo 'eval $(perl -I$HOME/foo/lib/perl5 -Mlocal::lib=$HOME/foo)' >>~/.bashrc
+ echo '[ $SHLVL -eq 1 ] && eval "$(perl -I$HOME/foo/lib/perl5 -Mlocal::lib=$HOME/foo)"' >>~/.bashrc
After writing your shell configuration file, be sure to re-read it to get the
changed settings into your current shell's environment. Bourne shells use
C<. ~/.bashrc> for this, whereas C shells use C<source ~/.cshrc>.
+=back
+
If you're on a slower machine, or are operating under draconian disk space
limitations, you can disable the automatic generation of manpages from POD when
installing modules by using the C<--no-manpages> argument when bootstrapping:
cd ../mydir2
... REPEAT ...
+When used in a C<.bashrc> file, it is recommended that you protect against
+re-activating a directory in a sub-shell. This can be done by checking the
+C<$SHLVL> variable as shown in synopsis. Without this, sub-shells created by
+the user or other programs will override changes made to the parent shell's
+environment.
+
If you are working with several C<local::lib> environments, you may want to
remove some of them from the current environment without disturbing the others.
You can deactivate one environment like this (using bourne sh):
=head3 PowerShell
-local::lib also supports PowerShell, and an be used with the
+local::lib also supports PowerShell, and can be used with the
C<Invoke-Expression> cmdlet.
Invoke-Expression "$(perl -Mlocal::lib)"
C<use lib "$ENV{HOME}/perl5/lib/perl5";> inside the script instead of using
C<local::lib> directly.
+=item * Conflicts with L<ExtUtils::MakeMaker>'s C<PREFIX> option.
+C<local::lib> uses the C<INSTALL_BASE> option, as it has more predictable and
+sane behavior. If something attempts to use the C<PREFIX> option when running
+a F<Makefile.PL>, L<ExtUtils::MakeMaker> will refuse to run, as the two
+options conflict. This can be worked around by temporarily unsetting the
+C<PERL_MM_OPT> environment variable.
+
+=item * Conflicts with L<Module::Build>'s C<--prefix> option. Similar to the
+previous limitation, but any C<--prefix> option specified will be ignored.
+This can be worked around by temporarily unsetting the C<PERL_MB_OPT>
+environment variable.
+
=back
Patches very much welcome for any of the above.
Patch for Carp version mismatch contributed by Hakim Cassimally
<osfameron@cpan.org>.
+Rewrite of internals and numerous bug fixes and added features contributed by
+Graham Knop <haarg@haarg.org>.
+
=head1 COPYRIGHT
-Copyright (c) 2007 - 2010 the local::lib L</AUTHOR> and L</CONTRIBUTORS> as
+Copyright (c) 2007 - 2013 the local::lib L</AUTHOR> and L</CONTRIBUTORS> as
listed above.
=head1 LICENSE