Como posso colocar a primeira letra de cada palavra em uma string em Perl?
-
09-06-2019 - |
Pergunta
Qual é a maneira mais fácil de colocar a primeira letra em maiúscula em cada palavra de uma string?
Solução
Não acredito que ucfirst() satisfaça a pergunta do OP de colocar a primeira letra de cada palavra em uma string em maiúscula sem dividir a string e juntá-la mais tarde.
Outras dicas
Como @brian mencionou nos comentários, a resposta atualmente aceita por @piCookie está errada!
$_="what's the wrong answer?";
s/\b(\w)/\U$1/g
print;
Isso vai imprimir "Qual é a resposta errada?" observe os s de maneira errada
Enquanto o Perguntas frequentes diz que provavelmente é melhor usar
s/([\w']+)/\u\L$1/g
Dê uma olhada no primeiro função.
$line = join " ", map {ucfirst} split " ", $line;
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;
Ao capturar o espaço em branco, ele é inserido na lista e utilizado para reconstruir o espaçamento original."ucfirst lc" coloca "teXT" em maiúscula para "Texto".
$string =~ s/(\w+)/\u$1/g;
deve funcionar bem
Isso coloca em maiúscula apenas a primeira palavra de cada linha:
perl -ne "print (ucfirst($1)$2) if s/^(\w)(.*)/\1\2/" file
Observe que a solução de perguntas frequentes não funciona se você tiver palavras em letras maiúsculas e quiser que elas sejam (apenas) maiúsculas.Você pode criar um regex mais complicado ou apenas fazer um lc na string antes de aplicar a solução de FAQ.
Você pode usar 'Caso de título', é um código muito legal escrito em Perl.
O primeiro function em um mapa certamente faz isso, mas apenas de uma forma muito rudimentar.Se você quiser algo um pouco mais sofisticado, dê uma olhada em Script TitleCase de John Gruber.
tente isto:
echo "what's the wrong answer?" |perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'
Qual é a resposta errada?