標籤: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__ 使用記錄與配置讀取