Perl, используя функцию tr для преобразования прописных букв в строчные и наоборот одновременно?
У меня есть строка
$string= 'AbCdEf';
и я хочу использовать функцию tr для преобразования всех заглавных букв в строчные и всех строчных в верхний регистр.... одновременно. Я просто хочу обратить это, чтобы стать.
aBcDeF
Я придумал эту строку, но я не уверен, как изменить ее, чтобы сделать то, что я хочу. Любая помощь, пожалуйста?
$string=~ tr/A-Z/a-z/;
Спасибо!
3 ответа
По запросу Тома, версия для 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 ЛАКТ-МАЛЕНЬЮ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ МАЛЕНЬКИЙ ЮЛКЕТ ЮЛКЕТ МАКЕТ
Таким образом, вы обнаружите, что они прописные или строчные, затем вызовете функцию обратного отображения и обнаружите, что ничего не изменилось. Я понимаю, зачем?