【问题标题】:List all variables loaded by 'require' function列出 'require' 函数加载的所有变量
【发布时间】:2020-06-23 18:13:32
【问题描述】:

我有一个包含一堆数据结构(数组、哈希)的配置文件,我使用它们将它们加载到我的 perl 脚本中

require '<config>';

我可以使用我知道的 config 中的变量,但是有没有办法可以列出 require 函数加载的所有变量?理想情况下,我希望它们加载到哈希变量中并引用它们以避免变量名冲突

【问题讨论】:

    标签: perl require


    【解决方案1】:

    不容易,这就是依赖全局命名变量有问题的原因。相反,让您的配置文件返回单个数据结构(如 hashref,因此您可以命名它的一部分)并将其与 do 一起加载到词法变量中:

    use strict;
    use warnings;
    my $file = '/path/to/foo.conf';
    my $data = do $file;
    die "Failed to parse $file: $@" if !defined $data and $@;
    die "Failed to read $file: $!" if !defined $data;
    

    确保将绝对路径传递给文件(推荐,以避免取决于您当前的工作目录)或在相对路径前面加上./,否则do(和require)将在 @INC 中搜索文件,因为 Perl 5.26 不包含当前工作目录。有关获取相对于当前文件的绝对路径的方法,请参阅 Path::This

    【讨论】:

    • 您的意思是将配置文件完全设置为 hashref 并收集其中的所有内容吗?我也在探索将配置文件动态转换为包的选项,但我更愿意直接加载并能够仅使用配置
    • 是的,因为最后评估的语句是从文件返回的,所以文件可以只是一个 hashref。这在例如Mojolicious config files.
    猜你喜欢
    • 2012-09-10
    • 2017-02-19
    • 2016-05-23
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多