Forum Webscript.Ru
Программирование => Perl => Тема начата: 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 хаотичный вывод. Как бы дерево, но без сортировки.
Почему выводы отличаются? Где копать?
Спасибо огромное заранее!
-
возможно поддежрки koi8-r и нет,
убедись что это не так
ps:
setlocale() без второго параметра вернёт текущее значение
-
да нет, все ок.
Выводит локаль консоли - ru_RU.KOI8-R ...
-
Выводит локаль консоли - ru_RU.KOI8-R ...
зачем консоли, когда
Но в выводе в web хаотичный вывод
?
далее, если и в "web" та же код. страница,
то приведи пример содержимого $my_root
-
Да, кодировка одна и там и там.
Веб-сервер 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?
-
Проблему решил.
При обнаружении вышеизложеной проблемы, надо смотреть на корректность установки переменной LC_COLLATE
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, \'ru_RU.KOI8-R\');
setlocale(LC_COLLATE, \'ru_RU.KOI8-R\');
# Теперь сортировка строк проходит корректно
Спасибо ondr и всем за помощь!