in reply to Directory of PM file

How can you get a handle on the directory that a module is located in from within that module's code?

Try __FILE__. See perldata, section "special literals". Drop the file's basename from that string, possibly using File::Basename.

A test revealed that this can produce a relative path; rel2abs() from File::Spec::Functions can remedy that.

For example, test module Foo.pm:

package Foo; use File::Spec::Functions qw(rel2abs); use File::Basename; my $dir = (fileparse(rel2abs(__FILE__)))[1]; print "Foo directory: $dir\n"; 1;

IMO it's safest to indeed set a variable with this directory in the top level of the module, as I do here, so it always gets set when the module is loaded.