my $sticky_dir; # EDIT sub import { shift; my %names; foreach (reverse @_) { my $path = $_; # we'll be modifying it, so break the alias $sticky_dir = $path unless $sticky_dir; # EDIT if ($path eq '') { ... # remove trailing duplicates @INC = grep { ++$names{$_} == 1 } @INC; # put sticky dir up front # EDIT @INC = ($sticky_dir, grep { ! m{^$sticky_dir$} } @INC); # EDIT return; } #### #!/usr/bin/perl BEGIN{ # necessary unshift @INC,'/home/shmem/tmp/foo'; # so 'use lib' } # gets my version use lib "/home/shmem/tmp/foo"; # this dir is now sticky BEGIN { print "lib is ",$INC{"lib.pm"},$/; } use lib "/some/path"; BEGIN { print "\@INC after 'use lib \"/some/path\":\n"; print "$_\n" for @INC; } use lib "/another/path"; BEGIN { print "\@INC after 'use lib \"/another/path\":\n"; print "$_\n" for @INC; } __END__ lib is /home/shmem/tmp/foo/lib.pm @INC after 'use lib "/some/path": /home/shmem/tmp/foo /some/path /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl . @INC after 'use lib "/another/path": /home/shmem/tmp/foo /another/path /some/path /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl . #### perl -I/my/debug/directory script