Ссылка на вложенный хэш, 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' } } };
|