Что лучший способ состоит в том, чтобы проанализировать файл INI в Perl и преобразовать его для хеширования?
Если вам нравится более перламутровый стиль, то попробуйте Галстук::Cfg
. Пример:
tie my %conf, 'Tie::Cfg', READ => "/etc/connect.cfg";
$conf{test}="this is a test";
Лучший способ - это использовать доступные модули в CPAN, как это предлагали другие. Для Вашего собственного понимания, предположим, что у Вас есть ini-файл вроде этого:
$ more test.ini
[Section1]
s1tag1=s1value1 # some comments
[Section2]
s2tag1=s2value1 # some comments
s2tag2=s2value2
[Section3]
s3tag1=s3value1
Вы можете делать свой собственный парсинг модулей w/o, используя только Perl'овские регекс (или строковые методы) + структуры данных как хэши.
Sample Code:
$ini="test.ini";
open (INI, "$ini") || die "Can't open $ini: $!\n";
while (<INI>) {
chomp;
if (/^\s*\[(\w+)\].*/) {
$section = $1;
}
if (/^\W*(\w+)=?(\w+)\W*(#.*)?$/) {
$keyword = $1;
$value = $2 ;
# put them into hash
$hash{$section} = [ $keyword, $value];
}
}
close (INI);
while( my( $k, $v ) = each( %hash ) ) {
print "$k => " . $hash{$k}->[0]."\n";
print "$k => " . $hash{$k}->[1]."\n";
}
output
$ perl perl.pl
Section1 => s1tag1
Section1 => s1value1
Section3 => s3tag1
Section3 => s3value1
Section2 => s2tag2
Section2 => s2value2
Config::Tiny очень прост и удобен в использовании.
$Config = Config::Tiny->read( 'file.conf' );
my $one = $Config->{section}->{one};
my $Foo = $Config->{section}->{Foo};