perl + create循环从INI文件中打印值

时间:2010-07-16 07:51:20

标签: perl

我的名字是abbi

我的第一个perl脚本在linux机器上运行

此脚本读取名为(input)的INI文件并打印val,param,name .....的值。

如何创建打印val1-valn OR循环值的循环来打印param1-paramn等的值? (在脚本中使用打印命令)

  • 循环必须具有匹配参数的选项 例如,只打印param1直到paramn值

n - 是每个参数的最后一个数字

 #!/usr/bin/perl




 open(IN,"input") or die "Couldn't open input: $!\n"; 
 while(<IN>) { 
 chomp; 
 /^([^=]+)=(.*)$/; 
 $config{$1} = $2; 

 } 
 close(IN);


 print $config{val1};
 print $config{val2};
 print $config{val3};

 print $config{param1};
 print $config{param2};
 print $config{param3}; 

 print $config{name1};
 .
 .
 .
 .

来自linux机器的ini文件的例子

猫输入

  val1=1
  val2=2
  val3=3
  param1=a
  param2=b
  param3=c
  name1=abbi
  name2=diana
  name3=elena

3 个答案:

答案 0 :(得分:2)

您可以使用Config::Tiny来阅读.ini文件。 然后,您可以使用返回的哈希来过滤您想要的内容。

答案 1 :(得分:1)

根据您的上一条评论,这将做您想做的事:

use strict;
use warnings;

my %config;
my $max_n = 0;
my $input = 'input';
open my $in, '<', $input
    or die "unable to open '$input' for reading: $!";
while (<$in>) {
    chomp;
    if (/^(.*?(\d+))\s*=(.*)$/) { 
        $config{$1} = $3; 
        $max_n = $2 if $2 > $max_n;
    }
}
close $in or die "unable to close '$input': $!";

for my $n(1..$max_n) {
    for my $param (qw/val param/) {
        print "$param.$n = $config{$param.$n}\n" if exists $config{$param.$n};
    }
}

答案 2 :(得分:0)

这个怎么样:

use warnings;
use strict;
my %config;

open my $input, "<", "input"
    or die "Couldn't open input: $!\n"; 
while(<$input>) { 
    chomp; 
    if ( /^([^=]+)=(.*)$/) { 
        $config{$1} = $2; 
    }
} 
close($input) or die $!;

for (sort keys %config) {
    if (/param\d+/) {
        print "$config{$_}\n";
    }
}