列出 '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' 函数加载的所有变量的主要内容,如果未能解决你的问题,请参考以下文章