Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/371.32  03 Oct 2000  16:34:51
 To : Igor Mikhailov
 Subject : Re: Mason
 -------------------------------------------------------------------------------- 
 
 <Igor_Mikhailov@p21.f42.n5005.z2.fidonet.org> wrote:
 
 IM> Linux login: Artem
 IM> password: :-P
  IM>>>> Так вот эта ошибка вылечилась у меня простым занесением 0.8 в
  IM>>>> кавычки:    return '0.8';
  MS>>> Это Джонатан Шварц все забывает исправить этот глючок.
  MS>>> Проявляется, когда локаль не английская (а именнно разделитель
  MS>>> десятичной дроби не точка)
  AC>> Да, настоятельно рекомендуется таки ставить локаль так, чтобы
  AC>> разделитель десятичной дроби был точкой (LC_NUMERIC=C). И чтобы дату
  AC>> отдавал по-английски (LC_TIME=C). А то глюков не оберешься.
 IM> Предлагаю это в FAQ.
 
  AC>>  У нас вот недавно перл из-за setlocale(LC_ALL,'ru_RU.KOI8-R')
  AC>> отказался умножать на 0.01. Во была песня, пока нашли...
 IM> Хорошо, а почему у меня:
 IM> % locale
 IM> LANG=ru_RU.KOI8-R
 IM> LC_CTYPE="ru_RU.KOI8-R"
 IM> LC_NUMERIC="ru_RU.KOI8-R"
 IM> LC_TIME="ru_RU.KOI8-R"
 IM> LC_COLLATE="ru_RU.KOI8-R"
 IM> LC_MONETARY="ru_RU.KOI8-R"
 IM> LC_MESSAGES="ru_RU.KOI8-R"
 IM> LC_ALL=
 
 IM> Hо
 IM> -------------------------
 IM> use locale;
 IM> use POSIX qw (locale_h);
 IM> setlocale(LC_ALL,'ru_RU.KOI8-R');
 IM> print scalar(localtime),"\n";
 IM> print 0.9*0.1,"\n";
 
 IM> -----------------------------
 IM> Tue Sep 26 05:30:37 2000       # по англ. почему?
 IM> 0,09                           # здесь с запятыми. и проблем при компиляции 
 IM> # нету. почему же в мазоне есть? ----------------------------- А так
 IM> : ---------------------------- use locale; use POSIX qw
 IM> (locale_h); setlocale(LC_ALL,'ru_RU.KOI8-R'); setlocale(LC_NUMERIC,'C'); pri
 IM> nt scalar(localtime),"\n"; print
 IM> 0.9*0.1,"\n"; ------------------------------- Tue Sep 26 05:31:51 2000      
 IM> # все также, почему? 0.09                            # здесь
 IM> нормально. ------------------------------
 
 Подозреваю, что у тебя более хитрая локаль либо скрипты _компилируются_
 при LC_NUMERIC=C, то есть к моменту выполнения
 setlocale(LC_ALL,'ru_RU.KOI8-R');
 перл уже знает, что на что надо умножать. Hо еще не знает, как выводить.
 
 Минимальный работающий пример с обломом:
 
 16:30:08.ttypts/3@Menegroth> locale
 LANG=ru_RU.KOI8-R
 LC_CTYPE="ru_RU.KOI8-R"
 LC_NUMERIC=ru_RU.KOI8-R
 LC_TIME=POSIX
 LC_COLLATE="ru_RU.KOI8-R"
 LC_MONETARY="ru_RU.KOI8-R"
 LC_MESSAGES=POSIX
 LC_ALL=
 
 (LC_NUMERIC выставлено явно)
 
 16:32:48.ttypts/3@Menegroth> cat mytest.pm
 package mytest;
 use locale;
 use POSIX qw(locale_h);
 setlocale(LC_NUMERIC,'ru_RU.KOI8-R');
 1;
 
 16:33:25.ttypts/3@Menegroth> cat test.pl
 #!/usr/bin/perl -w
 use mytest;
 print 0.9*0.1,"\n";
 
 16:33:23.ttypts/3@Menegroth> perl test.pl
 0
 
 Тут setlocale вызывается _до_ компиляции остатка кода скрипта.
 
 IM> И кстати, в плане оффтопика: mysql сортирует неправильно koi8r строки. Моя
 IM> локаль выше. Скомпилен mysql не так, или я что то не так делаю (как у него
 IM> узнать параметры компиляции)? Hикаких телодвижений для того, чтоб он
 IM> выдавал мне все правильно я не делаю. Просто делаю запрос с order by name
 IM> - возвращает не правильно. Причем даже в своем консольном клиенте.  mysql
 IM> Ver 9.35 Distrib 3.22.26a, for pc-linux-gnu (i686)
 
 MySQL, как большой, из соображений производительности чихать хотел на локаль.
 Его надо собирать с --with-charset=koi8_ru, тогда соответствующие таблицы
 вкомпилируются. И клиентские библиотеки тоже. В документации это описано, в
 отдельном разделе.
 
 -- 
 Счастливо!
   Ран.
 --- ifmail v.2.14.os-p7-tma3
  * Origin: MemoNet (2:5020/371.32@fidonet)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Mason   Artem Chuprina   25 Sep 2000 13:27:26 
 Mason   Igor Mikhailov   26 Sep 2000 05:41:40 
 Re: Mason   Artem Chuprina   03 Oct 2000 16:34:51 
Архивное /ru.cgi.perl/17121eb578f97.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional