gpt4 book ai didi

perl - 如何加载相对于模块路径的文件?

转载 作者:行者123 更新时间:2023-12-04 02:42:50 27 4
gpt4 key购买 nike

我不知道如何在 Perl 中做一件事,而且我觉得我在做一些根本错误的事情。

我正在做一个更大的项目,所以我将任务分成不同的模块。我将模块放入项目目录的“modules/”子目录中,并将该目录添加到 PERL5LIB 和 PERLLIB。

所有这些模块都使用一些配置,保存在主项目目录中的外部文件中 - 如果您从模块文件的角度来看,它是“../configure.yaml”。

但是,现在,当我通过“use”使用模块时,模块中的所有相对路径都是从使用这些模块的脚本的当前目录中获取的,而不是从模块本身的目录中获取的。即使我使用 FindBin 或其他任何东西也不会。

如何加载相对于模块路径的文件?这甚至可能/可取吗?

最佳答案

Perl 存储从 %INC 散列中加载模块的位置。您可以加载与此相关的内容:

package Module::Foo;
use File::Spec;
use strict;
use warnings;

my ($volume, $directory) = File::Spec->splitpath( $INC{'Module/Foo.pm'} );
my $config_file = File::Spec->catpath( $volume, $directory, '../configure.yaml' );

%INC 的键基于对::到/的严格转换,并附加了 .pm,即使在
Windows、VMS 等

请注意,如果您将相对目录放在 @INC 中,则 %INC 中的值可能是相对于当前目录的,因此如果在 require/use 和检查 %INC 之间更改目录时要小心。

关于perl - 如何加载相对于模块路径的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com