in reply to Regex: negative look ahead

It seems you want to write a pattern that says "match PAT1, and there should not be PAT2 somewhere after it". You can write that as:
/PAT1(?!.*PAT2)/s
or, in your case, as
$string =~ /^ERROR(?!.*\b(?:Error processing Cancel Execution|license +will expire)\b)/ms