You are running perl -p which by default processes each line in isolation, therefore your regex will never match because you don't have a line with both an opening and closing brace on it, for example.
You could change the line-ender to null to switch this behaviour off:
$ perl -lp0e 's/A\s*\{.+?\}//s' <<EOX > A { > B 123 > C xyz > } > EOX
This gives the empty output as you initially expected.
Update: See the discussion in the follow-up question Oneliner replace in-place adds extra spaces at the end of the file particularly in regards to the use of -l and how the order of these options is important.
🦛
In reply to Re: Why dot does not match newline in oneliner but it does in script, with /s modifier?
by hippo
in thread Why dot does not match newline in oneliner but it does in script, with /s modifier?
by bliako
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |