my (%foos, %bars); while( my $line = ) { chomp $line; if ( line =~ /^foo (?[^:]*):(?[^:]*)$/ ) { push( @{ $foos{ $+{KEY} } }, $+{VAL} ); } elsif ( $line =~ /^bar (?[^:]*):(?[^:]*)$/ ) { push( @{ $bars{ $+{KEY} } }, $+{VAL} ); } else { # warn qq( "$line" is the wrong format.\n ); } }