The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Ссылка на вложенный хэш"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Ссылка на вложенный хэш"  
Сообщение от masted (ok) on 28-Июн-07, 09:22 
Есть функция http://paste.org.ru/?vh7dt3, на основе чтения файлов/директорий состовляет сложный хэш.
На выходе ожидаю примерно такой хэш:
{
core=>{cmd=>cmd,ccd=>core-cmd},
channels=>#tezt,
locale=>utf8,
debug=>1,
user=>{},
server=>{}
}
Вместо этого получаю:
{
core=>{},
cmd=>cmd,
ccd=>core-cmd,
channels=>#tezt,
locale=>utf8,
debug=>1,
user=>{},
server=>{}
}

Подскажите, что я не так делаю? почему ключи продолжают создаваться в "корне" хэша, хотя при вызове функции я передаю ссылки на дочерние хэши...видимо я чего-то не понимаю.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Ссылка на вложенный хэш"  
Сообщение от NuINu (??) on 28-Июн-07, 09:47 
>Есть функция http://paste.org.ru/?vh7dt3, на основе чтения файлов/директорий состовляет сложный хэш.

>Подскажите, что я не так делаю? почему ключи продолжают создаваться в "корне"
>хэша, хотя при вызове функции я передаю ссылки на дочерние хэши...видимо
>я чего-то не понимаю.

А где там у тебя "дочерние хеши"?
нету их там! ты используешь один хеш в который все и добавляется! создай сначала дочерний хеш и для каждой ветви передавай его, и потом уже его и добавляй в свой сложный хеш.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Ссылка на вложенный хэш"  
Сообщение от masted (ok) on 28-Июн-07, 09:49 
>А где там у тебя "дочерние хеши"?
$C{$_}={} and cfg_readbranch("$cbranch/$_", \$C{$_})
Создаю и передаю... или не так нужно?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Ссылка на вложенный хэш"  
Сообщение от masted (ok) on 28-Июн-07, 09:51 
Хэш ведь создается, вот только элементы не в него добовляются, а в родительский, видимо как-то не так ссылку передаю на него

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Ссылка на вложенный хэш"  
Сообщение от NuINu (??) on 28-Июн-07, 10:21 
>>А где там у тебя "дочерние хеши"?
>$C{$_}={} and cfg_readbranch("$cbranch/$_", \$C{$_})
а ну да. я вначале не понял этой конструкции.

>Создаю и передаю... или не так нужно?
думаю что не так предаешь(раз не работает)

и знаешь чего, мне так кажеться что с приоритетами тут не все в порядке, возьмика все это в скобочки, а то мне кажеться что цикл выполняется только для cfg_readbranch("$cbranch/$_", \$C{$_})
а $C{$_}={} выполняется только один раз.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Ссылка на вложенный хэш"  
Сообщение от masted (ok) on 28-Июн-07, 20:56 
>и знаешь чего, мне так кажеться что с приоритетами тут не все
>в порядке
Не, с приоритетами всё впорядке, хэши создаются как надо...
Скорее всего ссылку как-то не так передаю, вопрос в том, как?:)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Ссылка на вложенный хэш"  
Сообщение от NuINu (??) on 29-Июн-07, 11:25 
>>и знаешь чего, мне так кажеться что с приоритетами тут не все
>>в порядке
>Не, с приоритетами всё впорядке, хэши создаются как надо...
>Скорее всего ссылку как-то не так передаю, вопрос в том, как?:)

ответ очень простой возми за правило ставить
#!/usr/bin/perl -w

use strict;

хотябы на этапе разработки программы!!!
ну а так вот:
#!/usr/bin/perl -w

use strict;
use Data::Dumper;

#change this for deep search
my @rdeep=(4,0);
#my @rdeep=(2,0);
my $debugit=1;

sub cfg_readbranch
{

    $rdeep[0] == $rdeep[1]?do{print"max recdeep: $rdeep[0], stop execute\n";return}:$rdeep[1]++ if $debugit;

    my ($cbranch, $C) = @_;
    my (@branches, @keys, @dir) = ();
        
    print "start scan $cbranch ...\n";


    opendir(Z, $cbranch) or do{ print "can?t opendir $cbranch: $!\n"; return 0 };

    @dir = readdir Z;
        
    while(<@dir>)
    {  
        next if /^\./;
        push@branches,$_  if -d "$cbranch/$_";
        push@keys,$_      if -f "$cbranch/$_";
    }  
            
    closedir Z;
    
    #$C{$_}=oslurp("$cbranch/$_")                         for @keys;
    $C->{$_}="$cbranch/$_"                           for @keys;
    foreach ( @branches) {
$C->{$_}= {};
cfg_readbranch("$cbranch/$_", $C->{$_} );
    }
    return 1;
}

my %C;

print Dumper(\%C),"\n", if cfg_readbranch('./testdir', \%C);
-------------------------------
output:
$VAR1 = {
          'file2' => './testdir/file2',
          'file1' => './testdir/file1',
          'file3' => './testdir/file3',
          'dir2' => {},
          'dir1' => {
                      'dir5' => {},
                      'dir6' => {
                                  'file1' => './testdir/dir1/dir6/file1',
                                  'file12' => './testdir/dir1/dir6/file12'
                                }
                    }
        };

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Ссылка на вложенный хэш"  
Сообщение от masted (ok) on 30-Июн-07, 07:27 
Благодарю :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру