Perl: 遍历 INI 文件

6

我将编写一个Perl脚本,需要读取并获取INI文件中的值。

INI文件格式:

[name]
Property=value

例子:

[switch_6500]
cpu=1.5.1.12.4
free_memory=1.45.32.16

[oracle_db_11g]
param1=value1
param2=value2
param3=value3
param4=value4
...

如您所见,可能有任意数量的部分,其中包含任意数量的参数。部分名称/参数的名称将始终不同。
我需要做的是让我的Perl脚本迭代遍历每个部分,并获取该部分的所有参数名称/值。我习惯于在INI文件中执行以下操作:只需指定部分名称以及参数名称即可:
  #!/usr/bin/perl -w

  use strict;
  use warnings;
  use Config::Tiny;

  # Read the configuration file
  my $Config = Config::Tiny->new();
  $Config = Config::Tiny->read( 'configfile.ini' );
  my $Metric1_var = $Config->{switch_6500}->{cpu};
  my $Metric2_var = $Config->{switch_6500}->{free_memory};

然而,现在我有无限数量的部分名称/参数,并且不知道它们的名称,我似乎找不到一种提取所有值的方法。我正在查看Config::IniFiles模块,它有一些有趣的东西,但似乎找不到一种在不知道部分/参数名称的情况下获取参数值的方法。
如果有人能帮助我遍历这个INI文件,我将不胜感激。
谢谢。
3个回答

7
您可以随心所欲地使用 Config::Tiny。 只需使用keys函数遍历哈希的所有键,如下所示:
use strict;
use Config::Tiny;

my $config = Config::Tiny->read('configfile.ini');

foreach my $section (keys %{$config}) {
    print "[$section]\n";
    foreach my $parameter (keys %{$config->{$section}}) {
        print "\t$parameter = $config->{$section}->{$parameter}\n";
    }
}

注意: 因为哈希值是“哈希”的,而不是像数组一样有顺序的,因此返回的键的顺序可能看起来毫无意义。由于 INI 文件中顺序并不重要(只有参数位于哪个部分的位置重要),所以这不应该成为问题。


5

我个人比较喜欢Config::Simple。你可以使用它的param()方法,不带参数返回文件中的所有参数。相对于Config::Tiny,它还有一些其他不错的功能。


2

我知道你对解析ini文件很满意。 如果你只想遍历所有的节和它们的键值对,那么你可以像这样遍历哈希表。

你可以通过哈希表来实现遍历。

foreach my $Section (keys %$Config) {
 print "[$Section]";
 foreach my $Key (keys %{$Config->{$Section}}) {
  print "$Key = $Config->{$Section}->{$Key}";
 }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接