Perl, используя функцию tr для преобразования прописных букв в строчные и наоборот одновременно?

У меня есть строка

$string= 'AbCdEf';

и я хочу использовать функцию tr для преобразования всех заглавных букв в строчные и всех строчных в верхний регистр.... одновременно. Я просто хочу обратить это, чтобы стать.

aBcDeF

Я придумал эту строку, но я не уверен, как изменить ее, чтобы сделать то, что я хочу. Любая помощь, пожалуйста?

$string=~ tr/A-Z/a-z/;

Спасибо!

3 ответа

Решение

$string =~ tr/A-Za-z/a-zA-Z/;

По запросу Тома, версия для Unicode-clean (или locales-clean):

s/([[:upper:]])|([[:lower:]])/defined $1 ? lc $1 : uc $2/eg

Вы можете сделать полное решение Unicode одним из следующих способов:

    s / (\ p {CWU}) | (\ p {CWL}) / определено $1? uc $1: lc $2/gex;

или так

    s/ (\p{CWL}) | (\p{CWU}) / определено $1? lc $1: uc $2/gex;

В зависимости от того, что вы хотите сделать с тем, что меняет регистр в обоих направлениях, например, Dz, верхний регистр которого DZ, а ​​нижний регистр dz.

Если вы выполните второе из этих двух подстановок через этот ввод:

     @ 0040 КОММЕРЧЕСКИЙ НА
     ©   00A9 АВТОРСКИЙ ЗНАК
     ЗНАК АНГСТРОМ Е 212B
     ⒜   249C ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО А
     Ⓐ ПИСЬМО ЗАГЛАВНОЙ ЛАТИНЫ 24B6
     Ⓐ МАЛЕНЬКОЕ ЛАТИНСКОЕ ПИСЬМО 24D0 A
     A  FF21 ПОЛНОЦЕННОЕ ЛАТИНСКОЕ КАПИТАЛЬНОЕ ПИСЬМО А
     a  FF41 ПОЛНОЕ ИЗ ЛАТИНСКОГО МАЛЕНЬКОГО ПИСЬМА А
     Ⓒ ПИСЬМО С КРУГЛЫМ ЛАТИНОМ 24B8  C
     Ⓒ МАЛЕНЬКОЕ ЛАТИНСКОЕ ПИСЬМО 24D2  C
     F 01F1 ПИСЬМО ЛАТИНСКОГО КАПИТАЛА DZ
     F 01F2 ПИСЬМО ЛАТИНСКОГО КАПИТАЛА С МАЛЕНЬКОМ ПИСЬМОМ Z
     F 01F3 ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО DZ
     Ⅲ 2172 МАЛЕНЬКОЕ РИМСКОЕ ЧИСЛО ТРИ
     S   0053  LATIN CAPITAL LETTER S
     s   0073  LATIN МАЛЕНЬКОЕ ПИСЬМО S
     ſ   017F  LATIN МАЛЕНЬКОЕ ПИСЬМО ДЛИНА S
     ⒮ ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО 24АЕ
     C ПИСЬМО С КРУГЛЫМ ЛАТИНОМ 24C8 S
     E 24E2 ЗАКРЫТЫЙ ЛАТИНСКИЙ МАЛЕНЬКИЙ ПИСЬМО S
     Ꞅ   A784  LATIN CAPITAL LETTER INSULAR S
     ꞅ   A785  LATIN МАЛЕНЬКОЕ ПИСЬМО ИЗОЛЯРНОЕ S
     00DF  LATIN МАЛЕНЬКОЕ ПИСЬМО SHARP S
     E 1E9E  LATIN CAPITAL ПИСЬМО SHARP S
     № 2166 РИМСКОЕ ЧИСЛО СЕМЬ
     Ⅻ 217B МАЛЕНЬКАЯ РИМСКАЯ ЦИФРОВАЯ ДВЕНАДЦАТЬ

это дает такие результаты:

     @ 0040 коммерческий на
     ©   00a9 знак авторского права
     å   212b знак ангстрема
     ⒜   249c заключенная в скобки латинская строчная буква a
     B 24b6 (латинская заглавная буква а)
     D 24d0 обведено латинской маленькой буквой а
     a  ff21 полная латинская заглавная буква a
     Full ff41 латинская строчная буква а
     B 24b8 обведено латинской заглавной буквой c
     D Латинская буква c в кружке 24d2
     f 01f1 латинская заглавная буква dz
     f 01f2 латинская заглавная буква d с маленькой буквой z
     F 01f3 латинская строчная dz
     72 2172 маленькая римская цифра три
     s   0053 латинская заглавная буква s
     S   0073 латинская строчная буква s
     S   017f латинская строчная буква
     Ae 24ae заключенная в скобки латинская строчная буква s
     C 24c8 обведено латинской заглавной буквой s
     E 24e2 обведено латинской маленькой буквой s
     ꞅ   a784 латинская заглавная буква
     Ꞅ   a785 латинская строчная буква
     SS   00df латинские строчные буквы
     1e9e латинская заглавная буква D
     66 2166 римская цифра семь
     7 217b маленькая римская цифра двенадцать

Единственная часть, которая будет отличаться (в этом наборе) при использовании первой функции, будет состоять в том, что последовательность dz будет выглядеть так:

     f 01f1 латинская заглавная буква dz
     F 01f2 латинская заглавная буква d с маленькой буквой z
     F 01f3 латинская строчная dz

Причина, по которой вы не хотите использовать только верхний или нижний тест, заключается в том, что тогда вы выполняете ненужную работу, поскольку существует множество кодированных точек, которые не меняют регистр при сопоставлении с регистром. Все это, например, кодированные точки в регистре, но они не изменяются ни в верхнем, ни в нижнем регистре:

     ª 00AA FEMININE ORDINAL ИНДИКАТОР ᴬ   1D2C МОДИФИКАТОР ПИСЬМО заглавные А ᴀ   1D00 латинской буква прописной A
     ℂ   2102 ДВОЙНОЙ STRUCK КАПИТАЛ С ᴰ   1D30 МОДИФИКАТОР заглавной буквой D 
     ʣ   02A3 латинского ПИСЬМО DZ Digraph ʤ   02A4 латинского ПИСЬМОМ Dezh Digraph ℇ   2107 ЭЙЛЕР КОНСТАНТА ɘ   0258 ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО ОБРАТНОЕ E
     ɞ   025E ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО ЗАКРЫТО ОБРАТНОЕ ОТКРЫТО E
     ℊ   210A СЦЕНАРИЙ МАЛЕНЬКИЙ G
     ɡ   0261 ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО СКРИПТ G
     ɢ   0262 ЛАТИНСКОЕ ПИСЬМО МАЛЕНЬКИЙ КАПИТАЛ G ST 02B0 МОДАЛЬЦЕВОЛЬНЫЙ ФАКТ 2139 ИНФОРМАЦИОННЫЙ ИСТОЧНИК ʲ   02B2 ПИСЬМО МОДИФИКАТОРОВ МАЛЫЙ J
     ℳ   2133 СЦЕНАРИЙ КАПИТАЛА M
     º   00BA ИНДИКАТОР МАСКУЛИНОВОГО ОБЪЕКТА ɸ   0278 ЛАТИНСКИЙ МАЛЕНЬКИЙ БУКВ PHI
     ĸ   0138 ЛАТИНСКИЙ МАЛЕНЬКИЙ БУКВЫ KRA
     ʏ   028F ЛАКТ-МАЛЕНЬЮ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ ЮЛКЕТ ЮЛКЕТ МАКЕТ

Таким образом, вы обнаружите, что они прописные или строчные, затем вызовете функцию обратного отображения и обнаружите, что ничего не изменилось. Я понимаю, зачем?

Другие вопросы по тегам