列出 'require' 函数加载的所有变量

Posted

技术标签:

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

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

require '<config>';

我可以使用我知道的 config 中的变量,但是有没有办法可以列出 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.

以上是关于列出 'require' 函数加载的所有变量的主要内容,如果未能解决你的问题,请参考以下文章

R中的常用命令(持续更新)

如何列出 Java 方法/函数中的所有局部变量?

vue-router懒加载或者按需加载

NodeJs模块加载流程分析(require)

Luigi 未能完成 require 方法中列出的所有任务

kernel_require.rb:55:in `require': 无法加载此类文件错误