Ответ 1
Смотрите часто задаваемые вопросы.
Я не верю, что ucfirst() удовлетворяет OP-вопросу, чтобы использовать заглавные буквы первой буквы каждого слова в строке, не разбивая строку и не присоединяясь к ней позже.
Каков самый простой способ заглавной буквы первой буквы в каждом слове строки?
Смотрите часто задаваемые вопросы.
Я не верю, что ucfirst() удовлетворяет OP-вопросу, чтобы использовать заглавные буквы первой буквы каждого слова в строке, не разбивая строку и не присоединяясь к ней позже.
Как @brian упоминает в комментариях, принятый в настоящее время ответ @piCookie неверен!
$_="what the wrong answer?";
s/\b(\w)/\U$1/g
print;
Это напечатает "What The Wrong Answer?" обратите внимание на неправильно заглавную S
Как FAQ говорит, что вам, вероятно, лучше использовать
s/([\w']+)/\u\L$1/g
или Text::Autoformat
Посмотрите на функцию ucfirst.
$line = join " ", map {ucfirst} split " ", $line;
$capitalized = join '', map { ucfirst lc $_ } split /(\s+)/, $line;
Захватив пробел, он вставляется в список и используется для восстановления исходного пробела. "ucfirst lc" переводится с "teXT" в "текст".
$string =~ s/(\w+)/\u$1/g;
должен отлично работать
Это заглавное только первое слово каждой строки:
perl -ne "print (ucfirst($1)$2) if s/^(\w)(.*)/\1\2/" file
Обратите внимание, что решение часто задаваемых вопросов не работает, если у вас есть слова, которые находятся во всех шапках, и вы хотите, чтобы они были (только) капитализированы вместо этого. Вы можете либо сделать более сложное регулярное выражение, либо просто сделать lc на строке, прежде чем применять решение для часто задаваемых вопросов.
Вы можете использовать Title Case ', это очень классный фрагмент кода, написанный на Perl.
Функция ucfirst на карте, безусловно, делает это, но только в очень примитивном ключе. Если вы хотите что-то более сложное, посмотрите John Gruber TitleCase script.
попробуйте это:
echo "what the wrong answer?" |perl -pe 's/^/ /; s/\s(\w+)/ \u$1/g; s/^ //'
Вывод будет:
What The Wrong Answer?