Por que essa linha única do Perl Regex não torna o resultado completo em maiúsculas usando o \U
modificador?
Eu espero MY_NICE_WORD
.
$ perl -pe 's/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/\U$1_$2\E/g' <(echo 'myNiceWord HTTPHeader')
my_Nice_Word HTTP_Header
De acordo com os documentos,
The following escape sequences are available in constructs that interpolate, but not in transliterations.
\l lowercase next character only
\u titlecase (not uppercase!) next character only
\L lowercase all characters till \E or end of string
\U uppercase all characters till \E or end of string
\F foldcase all characters till \E or end of string
\Q quote (disable) pattern metacharacters till \E or
end of string
\E end either case modification or quoted section
(whichever was last seen)
fonte:man --pager 'less -p "The following escape sequences are available in constructs that interpolate, but not in transliterations."' perlop
O texto de substituição não está dentro do contexto de interpolação?
Exemplos de trabalho
Ao seguir a documentação, no meu entender, posso oferecer este exemplo prático:
$ perl -pe 's/(hello)/\U$1\E/g' <(echo hello)
HELLO
Expressão regular de https://stackoverflow.com/a/1176023/1236128
-> caso importante coberto por isto: HTTPHeader não se tornaria h_t_t_p_header, em vez disso HTTP_Header
(ou com HTTP_HEADER maiúsculo)