in reply to Splitting inside an array

split() supports this type of thing. From the docs:

If the PATTERN contains parentheses, additional array elements are created from each matching substring in the delimiter.

split(/([,-])/, "1-10,20", 3); produces the list value

    (1, '-', 10, ',', 20)

So...for your example "x := y + z;":

$_="x:= y + z;" ; for (split(/(:=|\+|;)/)) { print "[$_]\n"; }
Produces:
[x] [:=] [ y ] [+] [ z] [;]