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
,它会意外地在旧版本中工作,但肯定不是你想要的。