perl中的分层配置文件

时间:2013-05-01 08:34:43

标签: xml json perl configuration-files perl-hash

我正在用perl编写一个测试自动化软件,我遇到了我定义的配置文件的问题。 自动化软件接收用perl哈希编写的输入CFG文件,其中包括要构建的图像。 现在需要在不同的测试场景中构建相同的图像,例如每晚构建,每小时构建和周末回归。 目前我们必须在3个不同的文件中定义相同的图像,任何时候我们想要更新它们(比如更新git分支)我们需要在3个文件中完成它。 我正在寻找一个解决方案,我可以创建一个定义构建的文件,让其他文件继承它。 我正在寻找perl / xml / json / etc中的内置语言功能。不是我需要在测试软件中实现自己的东西。

例如

晚上cfg文件:

builds => {
        smp_be => {
                  name => image_smp
                  branch => 2011.12
                  compiler => little_endian
         }
        up_be => {
                  name => image_up
                  branch => 2011.12
                  compiler => big_endian
         }

}
some other ** night **  specific stuff...

周末cfg文件

builds => {
            smp_be => {
                      name => image_smp
                      branch => 2011.12
                      compiler => little_endian
             }
            up_be => {
                      name => image_up
                      branch => 2011.12
                      compiler => big_endian
             }

    }
    some other ** weekend ** specific stuff...

相反,我希望有像

这样的东西

晚上的cfg文件

builds {
     # im inventing this syntax up
     # common_builds.cfg contains the previous files
     include common_builds.cfg
 }
some other ** night **  specific stuff...

请告知

提前致谢

1 个答案:

答案 0 :(得分:0)

如果顶级键不同,您可以简单地合并Perl中的哈希值:

my $builds_hashref = loaded_from_build_file();
my $scenario_hashref = loaded_from_scenario_file();

my $config_hashref = { %$builds_hashref, %$scenario_hashref };

。 。 。当然假设您已经实现了从任何文件加载通用配置的逻辑。

如果顶层的键是相同的,那么这种合并会变得更复杂,但仍然可以,只要您确切知道构建和场景文件之间的配置键在哪里会有所不同。