This is a stanza where, given a comma separated list of keywords to match on, find the values after the colon. The values could be empty and at the end of a line. I would be delighted to find an even simpler way to do this.
my $matcher = " (".join('|', keys %option_map)."):";
my @matches = grep( /$matcher/, @lines);
for my $match (@matches) {
my @parts = ($match =~ m/( *[^ ]+):( \S+ [^ #]*)(?! #|\S+:)/g);
for (my $i=0; $i < @parts; $i+=2) {
$option = $parts[$i];
$option =~ s/^\s*(.*)\s*$/$1/;
if ( defined $option_map{ $option } ) {
my $value = $parts[ $i + 1 ];
$value =~ s/^\s*(.*)\s*$/$1/;
$option_map{ $option } = $value;
}
}
}
And that’s pretty darned terse for that solution.
