Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Строковые операции на Перле - в нижний регистр


Автор: californie 21.9.2005, 07:14
Подскажите, какой функцией перевести строку в нижний регистр?

Автор: Sadok 21.9.2005, 08:59
perldoc -f lc

для кирилици наверняка потребуется еще и use locale

Автор: chaos 21.9.2005, 09:19
можно и так
tr /A-Z/a-z/

Автор: californie 21.9.2005, 09:40
есть переменная $var1
там большие буквы. Надо сделать маленькими.
Как?
tr? куда tr? tr($var1)???

Автор: sharq 21.9.2005, 10:46
Цитата(Sadok @ 21.9.2005, 09:59)
perldoc -f lc

для кирилици наверняка потребуется еще и use locale


smile

Автор: chaos 21.9.2005, 10:56
Цитата(californie @ 21.9.2005, 09:40)
есть переменная $var1
там большие буквы. Надо сделать маленькими.
Как?
tr? куда tr? tr($var1)???


Код

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

Автор: californie 21.9.2005, 11:33
$var1 =~ tr/A-Z/a-z/;
НЕ работает!

Автор: chaos 21.9.2005, 14:18
Цитата(californie @ 21.9.2005, 11:33)
$var1 =~ tr/A-Z/a-z/;
НЕ работает!

что не работает ???

вот тебе наглядный пример
Код

#!/usr/bin/perl -w
use strict;

my $var1 = "ABCDEFGHIJKLMNOP";
my $var2 = "abcdefghijklmnop";
$var1 =~ tr/A-Z/a-z/;
$var1 ne $var2 ? print "ERROR!!!!!\n" : print "$var1\n";



PS не говори только что в этом примере тоже ченить не работает!!!

Автор: Sadok 22.9.2005, 11:00
chaos
могу спорить, там не латиница smile

Автор: californie 22.9.2005, 11:26
у меня латиница.
$var1=...
потом делаю так:
$var1 =~ tr/A-Z/a-z/;
потом:
print "$var1";
и ...ничего не работает! буквы как были большие так и остались

Автор: californie 22.9.2005, 11:44
вот код из тестовой попытки:

<html>
<form method=post action="cgi-bin/test_hid.cgi">
<input type=text value="TEST1" name=text>
<input type=hidden value="test2" name=hid>
<input type=submit>
</form>
</html>

#! /usr/local/bin/perl
print "Content-Type: text/html\n\n";
use CGI qw(param header);
$var1=param('text');
$var2 =param('hid');
print "VAR1: $var1";
print "<p>";
print "VAR2: $var2";


ПЕЧАТАЕТ БОЛЬШИМИ БУКВАМИ!!!!

Автор: korob2001 22.9.2005, 12:30
Млин, ребята вы что делаете?? smile Не меняйте регистр транслитерацией, это не рекомедуется делать вообще, в каждом учебнике написано, этим пользовались только в первых версиях Perl, так как других средств тогда не было. Попробуй запусти такой код:
Код

#!/usr/bin/perl -w
use strict;

my $str = "tHiS IS A pErl prOGraMm";

# Переводим всю строку в верхний регистр
$str = uc( $str );
print $str, "\n";

# Опускаем в нижний регистр первый символ предложения
$str = lcfirst( $str );
print $str, "\n";

# Переводим всю строку в нижний регистр
$str = lc( $str );
print $str, "\n";

# Поднимаем в верхний регист первый символ предложения
$str = ucfirst( $str );
print $str, "\n";

# Напишем каждое слово с большой буквы
$str =~ s/(\w+)/ucfirst( lc( $1 ) )/eg;
print $str, "\n";


#########################################################
# Теперь воспользуемся escape-последовательностями      #
#########################################################
print "\n\nEscape\n\n";

# Поднимаем регистр всей строки escape-последовательностями
print "\UtHiS IS A pErl prOGraMm\n";

# Опустим всю строку в нижний регистр, а первый символ
# переведём в верхний регистр
print "\u\LtHiS IS A pErl prOGraMm\n";

# Теперь сделаем тоже самое, толко наоборот, всю строку
# в верхний регистр, а первый символ в нижний
print "\l\UtHiS IS A pErl prOGraMm\n";

# Переведём всю строку в нижний регистр, а первые два слова
# в верхний.
print "\UtHiS IS\E\L A pErl prOGraMm\n";

Автор: Гость_Shrek 17.10.2005, 10:44
Не вопрос, а вот как то же самое но с кириллицей? smile

Автор: korob2001 17.10.2005, 11:27
В начало кода добавь такую строку:
Код

use locale;

Если не поможет, тогда добавь ещё парочку строк, так же в начало:
Код

use POSIX qw(locale_h);
setlocale(LC_CTYPE, "Russian_Russia.1251"); 

Автор: Usya 11.12.2005, 07:35
korob2001, я случайно наткнулся на это

Цитата
Не меняйте регистр транслитерацией, это не рекомедуется делать вообще...


Можешь пояснить?

Автор: korob2001 11.12.2005, 14:38
Usya - я же там, откуда ты взял цитату, пояснил почему это делать не рекомендуется. Просто дочитай предложение до конца.
Вот тебе цитата из книги: "Программирование на Perl 3-е издание" Ларри Уолл, Том Кристиансен, Джон Орвант. стр. 199.
Цитата

Ещё одно замечание: не используйте tr///, y/// для перевода текста в верхний или нижний регистр. В этом случае следует предпочесть последовательности \U или \L в строках, заключённые в двойные кавычки ( или эквивалентные функции uc, lc ), поскольку они учитывают национальные установки и Unicode, а tr/A-Z/a-z/ не учитывает. Кроме того, в строках Unicode последовательность \u и соответствующая ей функция ucfirst учитывают понятие "заглавного регистра" (titlecase), что в некоторых языках отличается от простого преобразования в верхний регистр.

Да и на мой взгляд, пользоваться lc, uc, ucfirst гораздо удобнее, чем транслитерацией, даже если закрыть глаза на то, что написано выше.

Автор: Usya 11.12.2005, 15:52
korob2001
Во-первых, на счет "Просто дочитай предложение до конца": в том конце, про который ты говоришь, сказано - "в каждой книге написано" - слишком абстрактно, да и не в каждом это есть smile
А в нете через поисковик я что-то не нашел (может не повезло, а может плохо искал).

Во-вторых, как-то получилось, что учился я практически только по нетовским источникам. Из книг листал только одну, причем именно листал. Не найдя ничего, стал собирать всю инфу в нете.

В третьих, я не против "lc, uc, ucfirst гораздо удобнее", просто мне хотелось узнать, почему так нежелательно делать...

И в четвертых, а может быть и во-первых, спасибо за то, что привел цитату smile smile smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)