|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sergey Prozhogin 2:5030/324.324 30 Apr 2001 21:59:08 To : All Subject : проблема с хешами -------------------------------------------------------------------------------- проблема непростая, думаю многим интересна будет. парсю я xml. навесил колбеки на Start & Char и в старт-колбеке получаю пару значений ключn, ключn+1, а в текст - ключn+1, значение. имея такого рода данные я хочу составить хеш. $hash->{key1}->{key2}->{key3}->value; и двже написал небольшую прожку, которая это делает. и в принципе правильно, но с одной закавыкой. куда-то хеш время от времени девается! поглядите на эту прожку, это первое приближение. может что путное и посоветуете. орлам: пробовал я к примеру EasyTree, но она меня не устраивает тем, что данные из нее все равно надо перетягивать в ручную в свою структуру, лучше уж сразу напрямую и анализировать качество данных. благодарен за любые дельные советы. спасибо собственно вот сама прожка: === Cut === use strict; use Data::Dumper; my $hash; $hash->{level11}->{level21} = {} if( !add_key( $hash, 'level11', 'level21' )); print Dumper( $hash )."\n--------------------------------------\n"; $hash->{level21}->{level31} = {} if( !add_key( $hash, 'level21', 'level31' )); print Dumper( $hash )."\n-------------------------------------\n"; $hash->{level11}->{level22} = {} if( !add_key( $hash, 'level11', 'level22' )); print Dumper( $hash )."\n--------------------------------------\n"; $hash->{level22}->{level32} = {} if( !add_key( $hash, 'level22', 'level32')); print Dumper( $hash )."\n-------------------------------------\n"; #add_key( $hash, 'level22', 'level33' ); #print Dumper( $hash )."\n-------------------------------------\n"; #add_key( $hash, 'level33', 'level41' ); #print Dumper( $hash )."\n-------------------------------------\n"; #add_key( $hash, 'level33', 'level42' ); #print Dumper( $hash )."\n-------------------------------------\n"; sub add_key( $;$;$ ) { my ($hash, $key, $new_key ) = @_; if( exists( $hash->{$key} )){ $hash->{$key}->{$new_key} = {}; print '+1'; return 1; } else { while( my ($k, undef) = each %$hash ){ my $rc = 0; $rc = add_key( $hash->{$k}, $key, $new_key ) if( ref( $hash->{$k}) eq "HASH"); if( $rc == 1 ){ print '-1'; return 1; } } } print '0'; return 0; } === Cut === -= Какая у Мэри Поппинс \\/br \\cc pro --- kulatsky podpevala 3.00b2 * Origin: Renton WA 98058 (2:5030/324.324) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/45563aede1f2.html, оценка из 5, голосов 10
|