You can try this: say $rx to see what $rx is actually interpreted as. Spoiler, you'll see this:(?^u:abc|xyz).
As documented in Extended Patterns:
Starting in Perl 5.14, a "^" (caret or circumflex accent) immediately after the "?" is a shorthand equivalent to d-imnsx. Flags (except "d") may follow the caret to override it. But a minus sign is not legal with it.
The ^ actually disables case insensitivity. That's because the qr operator
"remembers" the flags used when creating a value with it, so that you can use it to always mean the same thing, regardless of where it's used.
Three ways to solve your issue, use the /i when creating $rx: $rx=qr/$rx/i;. Use lc like you already did. Or do not use qr and keep the regex as a string.
But that last one has some disavantages, using qr// will tell you if your regex is invalid sooner (if you use the regex in a completely different place, you might want the error message to be close to the definition, not the use), and it's not a bad thing to have something that is meant to be used as a regex to have the "type" Regexp.