#!/usr/bin/perl use warnings; use strict; my (%foos, %bars); while( my $line = ) { chomp $line; if ( my ( $key, $val ) = $line =~ /^foo ([^:]*):([^:]*)$/ ) { push( @{ $foos{ $key } }, $val ); } elsif ( my ( $key, $val ) = $line =~ /^bar ([^:]*):([^:]*)$/ ) { push( @{ $bars{ $key } }, $val ); } else { # warn qq( "$line" is the wrong format.\n ); } } __DATA__ foo key1:val1 bar key2:val2 foo key3:val3 bar key4:val4 3 bad:val