Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменение регистра русских букв 
:(
    Опции темы
Гость_Alex
Дата 28.1.2004, 10:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











наконец-то нашел хороший форум по cgi и решил запостить свой первый вопрос smile.gif
изучать перл начал только недавно, так что вопросов много.

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

заранее спасибо.
  Вверх
Secandr
Дата 28.1.2004, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



Попробуй lc
Ещё может понадобиться указать локаль: use locale


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
<YURIC>
Дата 28.1.2004, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.1.2003

Репутация: нет
Всего: нет



Код
#!/usr/bin/perl
use locale;
$str='ыпРР;
$new=lcfirst($str);
print $new;


Результат:

Код
Ыпрр


PM MAIL   Вверх
korob2001
Дата 29.1.2004, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Можно так же воспользоваться эскейп последовательностями.
Например:
Код

#!/usr/bin/perl -w
use strict; # не обязательно, но желательно
use locale;
my $name = 'дЕнИс';
print "\u\L$name\n";


\L - переводит все последующие символы в нижний регистр
\u - переводит следующий один сивол в верхний регистр

Здесь у вас может возникнуть резонный и вполне логичный вопрос:
Что нужно сделать, чтобы ограничить последовательность \L в определённом месте строки, то есть чтобы она не распространялась на всю строку/список?

Например есть две переменные $name и $pass как показано ниже:
Код

#!/usr/bin/perl -w
use strict; # не обязательно, но желательно
use locale;
my $name = 'дЕнИс';
my $pass  = 'izo2TeR1';
print "\u\L$name $pass\n";  #Что-то не так...

Что же произошло?

В приведённом выше коде последовательности \u и \L сделали своё дело. Сначала последовательность \L перевела все символы в нижний регистр вместе с переменной $pass, затем подключилась последовательность \u и мы получили следующую строку: Денис izo2ter1

Угу, но ведь пароль должен оставаться паролем.
Тут приходит на помощь ещё одна управляющая последовательность \E.

Приведу пример не верного кода, указанного выше с устранённой проблемой:
Код

#!/usr/bin/perl -w
use strict; # не обязательно, но желательно
use locale;
my $name = 'дЕнИс';
my $pass  = 'izo2TeR1';
print "\u\L$name\E $pass\n";

\E - служит ограничителем для таких последовательностей как \L, \U, \Q

И так, что мы имеем?
Последовательности \u\L как и в примере выше делают своё дело, но так как последовательность \L распространяется на все последующие за ней символы, нам нужно её остановить там, где нужно (в нашем случае, сразу после переменной $name). \L начинает переводить символы один за другим в нижний регистр, сремительно продвигаясь к концу строки ;), но, когда она встречает \E, нашей проказнице \L ничего не остаётся, кроме как обломаться, что она и делает. Все остальные символы строки остаются в том регистре, в каком были раньше.

Внимание!!!
Если управляющие последовательности расположены друг за другом, в нашем случае это \u\L, то сначала включается последняя, то есть \L, а только потом включается \u. И так далее.
Гы-гы, во я выдал! ;)

Это сообщение отредактировал(а) korob2001 - 29.1.2004, 22:55


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Гость_ALex
Дата 2.2.2004, 11:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











даа, целый трактат ! smile.gif

спасибо всем за быстрые ответы.
сейчас буду экспериментировать

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1170 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.