Forum Webscript.Ru

Программирование => Perl => Тема начата: green_forest от 08 Декабря 2005, 18:58:04

Название: [Решено] Помогите, плз! Сортировка хеша. Разные результаты в консоли и в web...
Отправлено: green_forest от 08 Декабря 2005, 18:58:04
Помогите, плз! Сортировка хеша. Разные результаты в консоли и в web...

Куски и скрипта:

use strict;
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, \'ru_RU.KOI8-R\');

sub view_tree {
   my ($root) = @_;
   foreach my $attr (sort keys %$root) {
      if (ref($root->{$attr}) ne \'HASH\') {
          print "$attr: $root->{$attr}\\n";
      } else {
          view_tree($root->{$attr});
      }
   }
}

# Создаем дерево
....

# Выводим дерево
&view_tree($my_root);

Локаль KOI8-R.
В консоли все супер.
Но в выводе в web хаотичный вывод. Как бы дерево, но без сортировки.
Почему выводы отличаются? Где копать?

Спасибо огромное заранее!
Название: [Решено] Помогите, плз! Сортировка хеша. Разные результаты в консоли и в web...
Отправлено: ondr от 08 Декабря 2005, 19:16:33
возможно поддежрки koi8-r и нет,
убедись что это не так


ps:
setlocale() без второго параметра вернёт текущее значение
Название: [Решено] Помогите, плз! Сортировка хеша. Разные результаты в консоли и в web...
Отправлено: green_forest от 08 Декабря 2005, 19:22:07
да нет, все ок.
Выводит локаль консоли -  ru_RU.KOI8-R ...
Название: [Решено] Помогите, плз! Сортировка хеша. Разные результаты в консоли и в web...
Отправлено: ondr от 08 Декабря 2005, 22:50:08
Цитировать
Выводит локаль консоли - ru_RU.KOI8-R ...

зачем консоли, когда
Цитировать
Но в выводе в web хаотичный вывод

?

далее, если и в "web" та же код. страница,
то приведи пример содержимого $my_root
Название: [Решено] Помогите, плз! Сортировка хеша. Разные результаты в консоли и в web...
Отправлено: green_forest от 09 Декабря 2005, 00:33:18
Да, кодировка одна и там и там.
Веб-сервер apache2, mod_perl (пробовал вер.1.99 и 2)

Это хеш ссылок на хеши, деревовидная структура.

# Корень дерева
my $tree = {};

# Запоминаем корень
my $my_root = $tree;
...
Создаем дерево
...
Выводим дерево


Елементы заполняются следующим образом:

$tree->{Отдел Продаж} = {};
$tree = $tree->{Отдел Продаж};

$tree->{Пупкин Вася} = {};
$tree = $tree->{Пупкин Вася};

# можна наверное $tree = $tree->{Пупкин Вася} = {};

Сортировка проходит по-ключам.

При выводе в web сортировка не срабатывает.
Вывод setlocale(LC_CTYPE) корректно работает и там и там.

Может дополнительно сказать что-то в конфиге apache?
Название: [Решено] Помогите, плз! Сортировка хеша. Разные результаты в консоли и в web...
Отправлено: green_forest от 09 Декабря 2005, 10:54:06
Проблему решил.
При обнаружении вышеизложеной проблемы, надо смотреть на корректность установки переменной LC_COLLATE

use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, \'ru_RU.KOI8-R\');
setlocale(LC_COLLATE, \'ru_RU.KOI8-R\');
# Теперь сортировка строк проходит корректно

Спасибо ondr и всем за помощь!