gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

将参数文件转化为hash表的脚本

点此下载)在配置脚本的时候,经常需要读入一些参数,为了方便起见有时会把参数整理成参数文件。当这些参数是平行关系的时候,只需要按行读入即可;但是更一般的情况是,如果这些参数存在层次的关系,该怎么读入呢?
比方说,我要写一个带界面的数据库查询工具,该工具的界面大小由初始化参数决定,数据库的连接参数也写入在参数文件中。这样就存在了两类截然不相同类型的数据,最好将它们区分开来。具体形式如下:
size^
    x^
        500
    $
    y^
        500
    $
$
db^
    name^
        tj
    $
    host^
        localhost
    $
    port^
        5432
    $
    id^
        postgres
    $
    pwd^
        7697
    $
$
以上数据存成tj.param文件,再把它整成一个hash表,这样我要取数据库的端口的话就可以用“$param{'db'}->{'port'}->{'val'}”。
脚本如下:
sub getparam{
    my $param = shift;
    my @tmp = ();
    my $tmp = '';
    push @tmp, $param ;
    open PAR, 'tj.para' ;
    while (<PAR>) {
        s/^(\s+)([^\s]*)(\s+)$/$2/;
        chomp;
        if ($_ ne '') {
            s/\^// and do {
                my %tmp = ();
                $tmp[length(@tmp) - 1]->{"$_"} = \%tmp;
                push @tmp, \%tmp ;
                next;
            };
            s/\$// and do {
                if (@tmp>0) {
                    pop @tmp;
                } else {
                    print "logic error: stack has been empty.\n";
                    return 0;
                }
                next;
            };
            $tmp[length(@tmp) - 1]->{"val"} = $_;
        }
    }
    close PAR;
    if (length(@tmp) != 0) { return 0; }
    else {return 1;}
}

1;
存成tjpar.pl,测试一下看看:
use  strict;
require('tjpar.pl');

my %param = ();
getparam(\%param);

print $param{'db'}->{'port'}->{'val'};
会打印出来5432,就成功了;-)

posted on 2007-08-14 11:21 gyn_tadao 阅读(418) 评论(1)  编辑 收藏 引用 所属分类: perl

评论

# re: 将参数文件转化为hash表的脚本 2007-08-14 15:42 8383

只要有博客就可以在8383.com免费申请.CN域名,输入域名就能直接进入博客,我刚申请了一个,快输入8383hosting.cn到我的博客看我是如何耍酷吧。  回复  更多评论   

只有注册用户登录后才能发表评论。
<2006年5月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿(15)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜