Arrays perl验证数据结构语法

Arrays perl验证数据结构语法,arrays,perl,data-structures,hash,syntax,Arrays,Perl,Data Structures,Hash,Syntax,我的脚本配置文件包含大量数据结构,例如: foo => 'bar', one => 'two', bla => [ 'something', 'else', ], bli => { here => { 'and' => 'there', 'also' => '

我的脚本配置文件包含大量数据结构,例如:

foo  =>  'bar',
one  =>  'two',
bla  =>  [
           'something',
           'else',
         ],
bli  =>  {
           here  =>  {
                       'and'  => 'there',
                       'also' => 'here',
                     },
         },
etc.
我正在使用一个简单的方法加载这些配置文件,例如:

%hash = do 'config.file';
我的问题是:当用户修改这个配置文件时,他们可能会把它弄乱,忘记逗号、括号或其他任何东西,这可能会产生可怕的影响,因为变量在脚本中之后会显示为空(我不想检查每个变量的存在情况…)

有没有办法在加载时或加载后立即“验证”此类文件/结构的语法?有没有这样的模块

我想我可以在底部添加一个值,然后检查这个值是否存在,但它有点脏


谢谢大家!

这应该是Perl可读的吗?(那么
b1
条目后面不应该有逗号吗?)那么验证它的方法是将其传递给,然后检查的值。不那么不安全的方法是用另一种流行、可读、可写、可理解的数据序列化格式格式化配置。该格式符合这些标准。

旨在验证JSON/YAML文档的模式,但由于它在内存数据结构而不是文件上运行,因此可用于任意配置文件格式。(这也意味着它不能做出某些区别,比如在YAML/JSON中使用
true
1

事实上,我粘贴了一个错误的示例(我自己忘记了逗号,很好的捕获),将对其进行编辑。谢谢谢谢,我将尝试eval方法,我也在考虑另一种格式,将检查JSON,但我希望避免使用许多模块,并尽可能使用纯Perl来缩短代码。最好的方法是编写和接口Perl代码来修改配置文件。您的用户可以看到一个问题并通过键入value提供简单的答案,您的代码将以预定义的格式存储结果。在这种情况下,您可以以您认为适合您的任务的任何格式存储配置文件。我喜欢这个想法(因为我们不能重写配置文件格式,因为太多的程序/脚本正在使用它),也会给它一个尝试。感谢提示确保将绝对路径或
'./config.file'
传递到
do
(建议使用绝对路径,因此它不依赖于当前目录-您可以基于当前目录)。如果你
do'config.file'
它会在
@INC
中搜索
config.file
,它会意外地在旧版本中工作,但肯定不是你想要的。