Perl是否有可能在替换中保留案例?

kor*_*mak 15 regex perl

我想用另一个字符串替换字符串 - 问题是我需要原始案例保持原样.如果字符串以大写字母开头,我希望替换也以大写字母开头.所以我尝试了这个:

$text =~s/\b(Abc|abc)\b/(Xyz|xyz)/g;
Run Code Online (Sandbox Code Playgroud)

但它用"(Xyz | xyz)"替换"Abc"或"abc"的每个匹配.所以我猜测在更换中使用管道是不可能的?

我也试过以下,它完全正常:

$text =~s/\bAbc\b/Xyz/g;
$text =~s/\babc\b/abc/g;
Run Code Online (Sandbox Code Playgroud)

...但我真的希望我只用一行代码才能做到这一点.如果在一个正则表达式中不可能有两个替换,有没有其他方法来保留字符串的原始情况?