in reply to import external package

You choosed to do the require at run time. Which means that at compile time, Perl considers:
Filesys::DiskSpace::df $dir;
to be an indirect object reference.

One solution is use 'use' instead of require. Another is use explicite parenthesis when calling Filesys::DiskSpace::df.

And if you use "use lib", you don't need the BEGIN block, and don't have to push on @INC yourself.