Вы не указали нам ожидаемый формат данных или не показали какой-либо существующий код, поэтому невозможно узнать, что вы ищете, но это должно помочь вам пройти не менее 90%:
use strict;
use warnings;
use Data::Dumper;
my %config;
my $group = '';
while (<DATA>) {
chomp;
next unless /\S/;
if (/^\[([^]]+)\]/) {
$group = $1;
next;
}
push(@{$config{$group}}, $_);
}
print Dumper(\%config);
__DATA__
[group1]
value1
value2
value3
[group2]
value1
value2
value3
value4
[group3]
value1
value2