|
人才网-提供最新的人才网信息,人才信息查询,人才网招聘服务
|
|
|
将参数文件转化为hash表的脚本 |
|
|
128人才网(www.job128.com.cn) IT技术论坛 在配置脚本的时候,经常需要读入一些参数,为了方便起见有时会把参数整理成参数文件。当这些参数是平行关系的时候,只需要按行读入即可;但是更一般的情况是,如果这些参数存在层次的关系,该怎么读入呢? 比方说,我要写一个带界面的数据库查询工具,该工具的界面大小由初始化参数决定,数据库的连接参数也写入在参数文件中。这样就存在了两类截然不相同类型的数据,最好将它们区分开来。具体形式如下: 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,就成功了;-) |
| 人才网http://www.job128.com 信息部 |