#!/usr/bin/perl
# file : DATA.pl
# author : darkstar
# date : 2014/08/26
use strict;
use warnings;
use diagnostics;
use Data::Dumper;
my %config;
while (<DATA>)
{
next if /^\s*#/;
next unless /\s*(\w+)\s*=\s*(\w+)\s*/;
my ($key, $value) = ($1, $2);
if (exists $config{$key}) {
if ( ! ref $config{$key}) {
$config{$key} = [ $config{$key} ];
}
push @{ $config{$key} }, $value;
}
else {
$config{$key} = $value;
}
}
print Dumper(%config);
__DATA__
#comment
#line
database = mysql
username = hwy
pass = as
hostname = localhost
use = a1
use = a2
use = a3
这里只读了一次DATA 如果想在一个脚本多次读DATA 可以
seek DATA, 0 , 0; 就可以了
-----------------------在上面脚本__DATA__ 前加
seek DATA, 0, 0;
while (<DATA>) {
chomp;
print;
}
就能看到 效果,如果注释 seek DATA, 0, 0 就能对比出不同之处。
一般我们把配置单独放在一个文件中,可以使用专门的模块来读取解释, 举个例子: Dacner 默认生成的app config 读取, 因为这个文件格式是YAML,使用Config::YAML 模块来解决它
#!/usr/bin/perl
#
use 5.10.0;
use strict;
use warnings;
use Data::Dumper;
#use Config::Tiny; # read .ini config
use Config::YAML;
my $c = Config::YAML->new( config => "/home/hwy/myapp/config.yml",
output => "/tmp/cc.cfg",
);
say $c->{appname}; #传统读取配置方法
say $c->{charset};
$c->{charset} = ‘GB2312‘; #重新设置配置文件的编码
say $c->get_appname; #OOP的属性读取方法
say $c->get_charset;
$c->write;
然后查看/tmp/cc.cfg 可以看到新生成的配置文件