我有一个.pm文件,让我们称之为A.pm,我在另一个文件B.pl中使用它,它存在于一个单独的目录中.在A.pm中,我想引用存在于同一目录中的外部非perl文件.为了避免硬编码该外部文件的路径,我想获得A.pm在运行时生活的目录.
我尝试过使用$ FindBin :: Bin和File :: Spec-> rel2abs('.'),但我了解到那些指向当前正在执行的脚本的目录,而不是当前文件.$ 0也为我提供了当前正在执行的脚本的名称.
有没有办法获得目录A.pm除了在A.pm的硬编码路径之外生活?
编辑:我还应该注意,我已经尝试仅使用相对于A.pm的路径引用外部文件,但在执行期间,代码在B.pl所在的目录中查找外部文件,因此这也不起作用.
__FILE__返回用于检索正在执行的文件的路径.这意味着您可以使用以下内容:
use File::Basename qw( dirname );
dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)
如果使用符号链接加载文件,那将失败,因此通常首先想要解析符号链接.
use Cwd qw( abs_path );
use File::Basename qw( dirname );
dirname(abs_path(__FILE__))
Run Code Online (Sandbox Code Playgroud)
这对于脚本比对模块更重要,因为用于加载模块的符号链接的几率非常低.
警告:如果自模块加载后CWD发生更改,这些可能会失败.