Как я могу получить доступ к файлам INI от Perl?

Что лучший способ состоит в том, чтобы проанализировать файл INI в Perl и преобразовать его для хеширования?

14
задан brian d foy 6 January 2010 в 17:44
поделиться

5 ответов

Я предпочитаю использовать Конфигурация::IniFiles.

22
ответ дан 1 December 2019 в 06:03
поделиться

Если вам нравится более перламутровый стиль, то попробуйте Галстук::Cfg. Пример:

tie my %conf, 'Tie::Cfg', READ => "/etc/connect.cfg";

$conf{test}="this is a test";
9
ответ дан 1 December 2019 в 06:03
поделиться

Лучший способ - это использовать доступные модули в 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
9
ответ дан 1 December 2019 в 06:03
поделиться

Config::Tiny очень прост и удобен в использовании.

$Config = Config::Tiny->read( 'file.conf' );

my $one = $Config->{section}->{one};
my $Foo = $Config->{section}->{Foo};
8
ответ дан 1 December 2019 в 06:03
поделиться

Попробуйте этот модуль из CPAN: Config::INI::Reader

7
ответ дан 1 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: