PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 54


use locale;

$beast  = "dromedary";

# Изменить регистр разных символов $beast-
Scapit  = ucfirst($beast),  #     Dromedary
Scapit  = "\u\L$beast"; # (то же)
Scapall = "uc($beast);  # DROMEDARY
$capall = "\U$beast";   » (то же)
$caprest = lcfirst(uc($beast));   #     dROMEOARY
$caprest = "\l\U$beast"; #   (то же)

Как правило, служебные команды обеспечивают согласованное применение регистра в строке:

#  Преобразовать первый символ каждого слова в верхний регистр,

#  а остальные символы - в нижний
$text = "tHIS is a loNG UNE";
$text =~ s/(w+)/\u\L$1/g;

print $text;

This Is A Long Line


1.9. Преобразование регистра    45

Ими также можно пользоваться для выполнения сравнений без учета регистра:

if (uc($a) eq uc($b))   {

print "a and b are the same\n', >

Программа randcap из примера 1.2 случайным образом преобразует в верхний регистр примерно 20 процентов вводимых символов. Пользуясь ей, можно свобод­но общаться с 14-летними WaREz dOODz.

Пример 1.2. randcap

ff1/usr/bin/perl -p

#  randcap фильтр, который случайным образом

#  преобразует к верхнему регистру 20% символов

#  В версии 5.004 вызов srandQ необязателен
BEGIN {srand(time() " ($$ + ($$ « 15))) }

sub randcase { rand(100) < 20 ¦> '\u$_[0]" • M\l$_[0]" } s/(\w)/randcase($1)/ge;

% randcap < genesis | head -9 boOk 01 genesis

001:001 in the BEginning goD created the heaven and tHe earTH.

001:002 and the earth wAS without ForM, aNO void; AnO darkneSS was upon The Face of the dEEp. an the spirit of GOd movEd upOn tHe face of the Waters.

001:003 and god Said, let there be ligHt: and therE wAs LigHt.

Более изящное решение — воспользоваться предусмотренной в Perl возможнос­тью применения поразрядных операторов для строк:

sub randcase  {

rand(100) < 20 ?  С\040' " $1)   .  $1 }

Этот фрагмент изменяет регистр примерно у 20 процентов символов. Однако для 8-разрядных кодировок он работает неверно. Аналогичная проблема суще­ствовала и в исходной программе randcase, однако она легко решалась примене­нием директивы use locale.




Начало  Назад  Вперед



Книжный магазин