in reply to split() Problem

You're not asking anything, and there are so many red flags and other things that are probably mistakes here I don't know what the hell this code is supposed to do. Just the first line, then:

for $_ (%edict) { # for entries with more than one keyword
That iterates of the hash keys AND values, storing each of them in $_

in other words, given the hash %edict = ( a => 1, b => 2); $_ would contain 'a', then 1, then 'b' and then 2.

Also you're splitting whatever it is you're splitting on "; " (that's semicolon followed by a space), instead of a semicolon as you claim you want.

Update: as a first attempt at clarifying this, please explain what the top-level for loop is supposed to do and how that loop's body is effected by the loop (and especially, what you're doing with $_).