【发布时间】:2020-06-23 18:13:32
【问题描述】:
我有一个包含一堆数据结构(数组、哈希)的配置文件,我使用它们将它们加载到我的 perl 脚本中
require '<config>';
我可以使用我知道的 config 中的变量,但是有没有办法可以列出 require 函数加载的所有变量?理想情况下,我希望它们加载到哈希变量中并引用它们以避免变量名冲突
【问题讨论】:
我有一个包含一堆数据结构(数组、哈希)的配置文件,我使用它们将它们加载到我的 perl 脚本中
require '<config>';
我可以使用我知道的 config 中的变量,但是有没有办法可以列出 require 函数加载的所有变量?理想情况下,我希望它们加载到哈希变量中并引用它们以避免变量名冲突
【问题讨论】:
不容易,这就是依赖全局命名变量有问题的原因。相反,让您的配置文件返回单个数据结构(如 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。
【讨论】: