foreach my $line (@lines) { my ($name, $values) = split '::', $line, 2; # <-- This is the key - limit your split my @values = split /\|/, $values; # <-- This is not limited print "$name\n"; foreach my $value (@values) { my ($color, $number) = split '::', $value; print "\t$color => $number\n"; } print $/; }