I already have a BEGIN block in the test, like this
#! /usr/bin/env perl
use Test::More tests => 7;
use POSIX qw(strftime);
use lib "$ENV{FVIS_HOME}/monitor/lib";
use lib "$ENV{FVIS_HOME}/monitor/tools";
BEGIN {
use Cwd;
use File::Path;
use File::Basename qw(basename dirname);
my $tmpdir = &getcwd() . "/test/" . basename($0);
rmtree($tmpdir);
mkpath("$tmpdir/log");
mkpath("$tmpdir/monitor/schedule");
mkpath("$tmpdir/monitor/etc");
symlink("$ENV{FVIS_HOME}/lib", "$tmpdir/lib");
symlink("$ENV{FVIS_HOME}/etc", "$tmpdir/etc");
$ENV{FVIS_HOME} = $tmpdir;
$ENV{GUMS_ROOT} = "$tmpdir/monitor";
unshift(@INC, "$ENV{FVIS_HOME}/lib/perl");
unshift(@INC, "./blib/lib");
}
use FVIS::Rachlis::Job;
use FVIS::Rachlis::Schedule::File;
use FVIS::Rachlis::Schedule;
What this is doing is setting up a sandbox linking parts to the actual installed area. The behavior with our without the two unshift() is the same. Both FVIS::Rachlis::Job and FVIS::Rachlis::Schedule::File; are loaded from blib/lib, FVIS::Rachlis::Schedule is loaded from $ENV{FVIS_HOME}/lib/perl which is already in PERL5LIB. Both load FVIS::Log which wraps part of Log::Log4perl. Flipping the order of the last two flips which one is loaded from blib/lib.