Ok, split /[\s:()]+/,$line>, please read http://perldoc.perl.org/functions/split.html.
Split takes a line as input and makes an array according to the split regex. The split regex defines what constitutes a new array element boundary. During the split process the "separators" are "consumed", meaning deleted.
The regex above says: "if I see one or more, spaces, colons or left paren or right paren", delete those and move what is left over to the left as an array element. This part: [6,7,8,-2] says ok, I've lots of stuff but I only want the 7th,8th,9th thing and the 2nd one from the end. Perl arrays are indexed at zero. So the first one is index[0]. Run my "hint" code and see what happens if you delete () from the regex. Experimentation is key. Run some examples and report back.
This is not a perfect analogy, but if you had an old style typewriter and hit "carriage return" every time you saw the matching regex, you would wind up with my "hint" code. | [reply] [d/l] [select] |
| [reply] |
| [reply] [d/l] |
split /[[]\s:()]+/,$line>
Have you tried to use the quoted code? What happens if you do? (I'm not sure what the '>' on the end of this code fragment is supposed to be.)
I'm not familiar with your data, but I think I would try (untested)
split /[\[\]\s:()]+/, $line
instead. Be aware that this may generate an extraneous empty string at the beginning of the split output list, so your selection indices may need adjustment.
Give a man a fish: <%-{-{-{-<
| [reply] [d/l] [select] |