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