The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Ссылка на вложенный хэш, !*! masted, 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=>{}
}

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

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

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

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

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

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

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

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

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

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

            ответ очень простой возми за правило ставить
            #!/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'
                                            }
                                }
                    };




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

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