Corion's analysis is right. As a question, you may not even need to fiddle with the \n at all, by changing from \S to \w.
a word char is 0-9A-Za-z_ and therefore \ won't match. Its not clear to me what all kind of characters could be in "theoneiwant" anyway if your data allows it something even simpler can be done...
for (<DATA>) {
print "Matched: $1\n"
if m/DIP\s+\S+\s+(\w+)/; #([\w-]+) to allow -
};