码迷,mamicode.com
首页 > 其他好文 > 详细

perl __DATA__ 使用记录与配置读取

时间:2014-08-26 11:09:35      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:os   使用   文件   ar   2014   line   sp   new   on   

#!/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 可以看到新生成的配置文件

 

perl __DATA__ 使用记录与配置读取

标签:os   使用   文件   ar   2014   line   sp   new   on   

原文地址:http://www.cnblogs.com/huangv1/p/3936539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!