Chinaunix首页 | 论坛 | 博客
  • 博客访问: 553328
  • 博文数量: 38
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 1460
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-24 13:04
文章分类

全部博文(38)

文章存档

2012年(1)

2010年(9)

2009年(3)

2008年(25)

我的朋友

分类: LINUX

2008-06-06 08:44:13

文件: tj.rar
大小: 0KB
下载: 下载

点此下载)在配置脚本的时候,经常需要读入一些参数,为了方便起见有时会把参数整理成参数文件。当这些参数是平行关系的时候,只需要按行读入即可;但是更一般的情况是,如果这些参数存在层次的关系,该怎么读入呢?
比方说,我要写一个带界面的数据库查询工具,该工具的界面大小由初始化参数决定,数据库的连接参数也写入在参数文件中。这样就存在了两类截然不相同类型的数据,最好将它们区分开来。具体形式如下:
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 () {
        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,就成功了;-)
阅读(1433) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-11-21 11:51:25

好的.呵呵.....

chinaunix网友2008-08-13 14:36:09

好多都是我写的啊,你转的话也注明一下啊。