Leave out the {1}, this is totally redundant, everything is matched exactly once unless you specify otherwise. This leaves us with:
/^ween\s*\{\s*(.*\;)\s*\}$/
You don't have to escape { unless it is ambigous. And no need to escape ; so:
/^ween\s*{\s*(.*;)\s*}$/
Metacharacters loose their special meaning in a character class, so no need to escape them there. With the exception of the closing square bracket and the forward slash (used as delimiter):
$cmd =~ /[.!+=[\]*<>$%@?&:\/\\{}]/g
# also possible but I prefer the alternative above
$cmd =~ /[].!+=[*<>$%@?&:\/\\{}]/g
You can use different delimiters (then it's no longer necessary to escape the forward slash) but then can no longer leave out the m// of the pattern match operator. The /g modifier is useless, too, it's enough to know if the pattern matched or not:
$cmd =~ m#[.!+=[\]*<>$%@?&:/\\{}]#