If you unshift @INC, you have to do it in a BEGIN clause before using it.
Here's an example from my darkpan repo: If you normally install your module in @INC (for example as part of a CPAN distribution), but don't want the hassle while debugging, you can do something like this:
use strict;
use warnings;
BEGIN {
if(defined($ARGV[0]) && $ARGV[0] eq "--debug") {
print("Development INC activated\n\n");
unshift @INC, "/home/cavac/src/maplat_prodit/lib"; # my darkpa
+n modules
unshift @INC, "/home/cavac/src/maplat_framework/lib"; # my ope
+n source modules
} else {
print("Development INC deactivated, using default INC paths\n\
+n");
}
}
use Maplat::Worker;
use Maplat::Worker::ProdIT;
"I know what i'm doing! Look, what could possibly go wrong? All i have to pull this lever like so, and then press this button here like ArghhhhhaaAaAAAaaagraaaAAaa!!!"