1package blib; 2 3=head1 NAME 4 5blib - Use MakeMaker's uninstalled version of a package 6 7=head1 SYNOPSIS 8 9 perl -Mblib script [args...] 10 11 perl -Mblib=dir script [args...] 12 13=head1 DESCRIPTION 14 15Looks for MakeMaker-like I<'blib'> directory structure starting in 16I<dir> (or current directory) and working back up to five levels of '..'. 17 18Intended for use on command line with B<-M> option as a way of testing 19arbitary scripts against an uninstalled version of a package. 20 21However it is possible to : 22 23 use blib; 24 or 25 use blib '..'; 26 27etc. if you really must. 28 29=head1 BUGS 30 31Pollutes global name space for development only task. 32 33=head1 AUTHOR 34 35Nick Ing-Simmons nik@tiuk.ti.com 36 37=cut 38 39use Cwd; 40use File::Spec; 41 42use vars qw($VERSION $Verbose); 43$VERSION = '1.02'; 44$Verbose = 0; 45 46sub import 47{ 48 my $package = shift; 49 my $dir = getcwd; 50 if ($^O eq 'VMS') { ($dir = VMS::Filespec::unixify($dir)) =~ s-/\z--; } 51 if (@_) 52 { 53 $dir = shift; 54 $dir =~ s/blib\z//; 55 $dir =~ s,/+\z,,; 56 $dir = File::Spec->curdir unless ($dir); 57 die "$dir is not a directory\n" unless (-d $dir); 58 } 59 my $i = 5; 60 my($blib, $blib_lib, $blib_arch); 61 while ($i--) 62 { 63 $blib = File::Spec->catdir($dir, "blib"); 64 $blib_lib = File::Spec->catdir($blib, "lib"); 65 66 if ($^O eq 'MacOS') 67 { 68 $blib_arch = File::Spec->catdir($blib_lib, $MacPerl::Architecture); 69 } 70 else 71 { 72 $blib_arch = File::Spec->catdir($blib, "arch"); 73 } 74 75 if (-d $blib && -d $blib_arch && -d $blib_lib) 76 { 77 unshift(@INC,$blib_arch,$blib_lib); 78 warn "Using $blib\n" if $Verbose; 79 return; 80 } 81 $dir = File::Spec->catdir($dir, File::Spec->updir); 82 } 83 die "Cannot find blib even in $dir\n"; 84} 85 861; 87