use strict; while (){ chomp; my %line = map { split /\s*:\s*/ } split /\s*\|\s*/; print "color = $line{color}\n"; #or for my $key (keys %line){ print "$key = $line{$key}\n"; } }