in reply to Behavior of compile-time constants?

No. Constants aren't substitutions like C-preprocessor macros are. If you use =>, it's left hand side will be autoquoted if the left hand side looks like an identifier. Barewords are valid identifiers, and that's what you have here. So, either use a comma, preceed ROTATE with the (no-op) unary plus, put parens after ROTATE, or something else such that it isn't a bareword anymore.

Doing use inside a BEGIN is not needed, as use itself happens at compile time.

Abigail