Here is the scenario, I have two files:
1. dir/A.pm
2. dir/new_dir/a.t
This is how A.pm looks like:
package A;
use FindBin;
use Test::More;
is (FindBin->again, 'dir', 'got dir');
1;
This is how a.t looks like:
use FindBin;
use Test::More qw(no_plan);
use A;
is (FindBin->again, 'dir/new_dir', 'got dir/new_dir');
So I ran file a.t with perl new_dir/a.t and expect my tests to pass. But this is my test result:
not ok 1 - got dir
# Failed test 'got fir'
# at A.pm line 6.
# got: 'dir/new_dir'
# expected: 'dir'
ok 2 - got dir/new_dir
1..2
Am I doing anything wrong? I am very new to perl. Please help!!
As Dave Sherohman notes, FindBin is for finding the location of the main script, not individual modules. From the documentation:
(Admittedly, the documentation does, somewhat confusingly, refer to “modules” in the “KNOWN ISSUES” section, but it doesn’t really mean what you think it means by that.)
Anyway, if you look at the source with
perldoc -m FindBin, you’ll see that FindBin obtains the path to the script from the$0variable. If you’re interested in finding the location of a module included viause(orrequire), you should look under%INCinstead, something like this: