perl配置文件包含变量?

时间:2015-11-30 20:50:08

标签: perl configuration configuration-files

我想创建一个perl配置文件。我想要一个包含变量的文件格式。所以像这样:

DefaultDirectory = /var/myProgram/
OutputDirectory = $DefaultDirectory/output
InputDirectory = $DefaultDirectory/input

这看起来很简单,但我不确定perl的可用内容。我看到的perl ini选项似乎并不支持它。我看了YAML,但看起来几乎是矫枉过正。

有人能建议一个好的文件格式和支持它的CPAN模块,它可以支持简单的变量吗?我坚持使用perl 5.5,所以希望这是一个较旧的模块。

2 个答案:

答案 0 :(得分:1)

尝试Config::General

test.cfg

# Simple variables
DefaultDirectory = /var/myProgram
OutputDirectory  = $DefaultDirectory/output
InputDirectory   = $DefaultDirectory/input

# Blocks of related variables
<host_dev>
    host     = devsite.example.com
    user     = devuser
    password = ComeOnIn
</host_dev>

<host_prod>
    host     = prodsite.example.com
    user     = produser
    password = LockedDown
</host_prod>

test.pl

#!/usr/bin/perl

use strict;
use warnings;

use Config::General;

my $conf = Config::General->new(
    -ConfigFile => 'test.cfg',
    -InterPolateVars => 1
);

my %config = $conf->getall;

print <<HERE;
    Default directory: $config{'DefaultDirectory'}
    Output directory: $config{'OutputDirectory'}  
    Input directory: $config{'InputDirectory'}    

    Development host: $config{'host_dev'}{'host'}
    Development password: $config{'host_dev'}{'password'}

    Production host: $config{'host_prod'}{'host'}
    Production password: $config{'host_prod'}{'password'}
HERE

输出:

Default directory: /var/myProgram
Output directory: /var/myProgram/output
Input directory: /var/myProgram/input

Development host: devsite.example.com
Development password: ComeOnIn

Production host: prodsite.example.com
Production password: LockedDown

答案 1 :(得分:0)

您是否考虑过编写自己的包含config的perl模块?

像(MyConfig.pm):

package MyConfig;
our $DefaultDirectory = '/path/to/somewhere';
our $setting_for_something = 5; 

1;

然后,您可以使用use MyConfig;导入该内容。您可能需要先设置use libFindBin来查找模块(取决于您调用脚本的位置 - use将搜索cwd)。

但是真的 - perl 5.5?鉴于这是2004年的版本,这非常值得更新。我希望你不会在10年前的软件上运行太多东西 - 世界已经改变了很多介入时间。 (Perl也是如此)