perl __DATA__ 使用记录与配置读取

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

时间: 2024-10-09 07:15:36

perl __DATA__ 使用记录与配置读取的相关文章

Perl常用语法记录

Perl常用语法记录 ##包的切换和调用其它包的方式 #package A; #my $a=10; #package B; #print $A::a; #print $a;     ##local局部标识符的使用 #$aa=20; #{ # local $aa; # $aa=10; # print "$aa \n"; # #} #print $aa; ##别名的使用 =comment $b=10; $a=1; $c=200; { local *b; *b=*a; $b=20; prin

使用工具自动化配置读取

当你知道使用配置代替HardCode说明你从新手变成了一名初级程序,当有一天你意识到你的配置是需要使用工具去驱动的,这时候你已经走在了进阶为行家的路上了.我之前看有些朋友写的配置读取工具类是针对一个一个Model去写,每个Model都翻一种花样去写,我想说这代码看起来就像是喝醉酒之后写的.好了,现在该醒醒酒了,下文讲一个胡乱编造的故事权当娱乐 小明在开发一款游戏,由于游戏中需要调整的参数太多,于是小明把各个人物的属性都序列化在Unity的Inspect中显示.开发了几天之后小明发现自己需要配置的

记录一种读取XML的方法

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace ConsoleApplication_readxml { class Program { static void Main(string[] args) { string xml

cakephp Configure::read(&#39;KHCITY&#39;) 数据配置读取

1. 2.引入 循环遍历 正确: cakephp Configure::read('KHCITY') 数据配置读取

.NET Core技术研究-最实用最常用的配置读取方式

原文:.NET Core技术研究-最实用最常用的配置读取方式 升级ASP.NET Core后,配置的读取是第一个要明确的技术.原先的App.Config.Web.Config.自定义Config在ASP.NET Core中如何正常使用.有必要好好总结整理一下,相信大家都会用到. 首先,看一下ASP.NET Core中的配置提供程序(Configuration Providers): 一.配置提供程序(Configuration Providers) ASP.NET Core 使用一个或多个配置提

Cookie中图片的浏览记录与cookie读取servle时路径的设置(文字描述)

public class ShowServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletR

solr分布式索引【实战一、分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例】

1 private static Properties prop = new Properties(); 2 3 private static String confFilePath = "conf" + File.separator + "config.properties";// 配置文件目录 4 static { 5 // 加载properties 6 InputStream is = null; 7 InputStreamReader isr = null;

tensorfolw配置过程中遇到的一些问题及其解决过程的记录(配置SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real-Time Object Detection for Autonomous Driving)

今天看到一篇关于检测的论文<SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real-Time Object Detection for Autonomous Driving>,论文中的效果还不错,后来查了一下,有一个Tensorflow版本的实现,因此在自己的机器上配置了Tensorflow的环境,然后将其给出的demo跑通了,其中遇到了一些小问题,通过查找网络上的资料解决掉了,在这里

在桌面程序上(Winform or others)和Metro/Modern 程序(Windows store app)的交互(相互打开,配置读取等)

这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情无法做到,因此额外做了一个.NET桌面引擎来辅助,那么现在就需要让这两个不同环境的程序进行交互. 第一步:在桌面应用引擎中,唤醒商店应用. 根据MSDN解释,这边最简单的办法是使用协议(URI protocol)来解决. 1:打开程序的Package.appxmanifest,在声明中添加协议 名称