Автор Тема: [Решено] Помогите, плз! Сортировка хеша. Разные результаты в консоли и в web...  (Прочитано 4413 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн green_forest

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите, плз! Сортировка хеша. Разные результаты в консоли и в 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 хаотичный вывод. Как бы дерево, но без сортировки.
Почему выводы отличаются? Где копать?

Спасибо огромное заранее!
« Последнее редактирование: 09 Декабря 2005, 10:49:36 от green_forest »

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
возможно поддежрки koi8-r и нет,
убедись что это не так


ps:
setlocale() без второго параметра вернёт текущее значение
0 OK, 0:1

Оффлайн green_forest

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
да нет, все ок.
Выводит локаль консоли -  ru_RU.KOI8-R ...

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Цитировать
Выводит локаль консоли - ru_RU.KOI8-R ...

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

?

далее, если и в "web" та же код. страница,
то приведи пример содержимого $my_root
0 OK, 0:1

Оффлайн green_forest

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Да, кодировка одна и там и там.
Веб-сервер 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?

Оффлайн green_forest

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблему решил.
При обнаружении вышеизложеной проблемы, надо смотреть на корректность установки переменной LC_COLLATE

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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28