my @KEYS = qw( Pseudo Logical ); my $key_count = scalar @KEYS; my $key_alternation = join q{|}, @KEYS; my $key_value_pattern = qr/ ($key_alternation) # capture a key [^=]* # skip what is not an equal sign = # match the equal sign (.*\S) # capture the value /x; PARAGRAPH: while (not my %value_for) { LINE: while () { my ($key, $value) = /$key_value_pattern/; next LINE if !$key; $value_for{$key} = $value; if (scalar keys %value_for >= $key_count) { print join (q{, }, @value_for{@KEYS}), "\n"; next PARAGRAPH; } } # eof last PARAGRAPH; } __DATA__