Извиняюсь что еще раз отвлекаю, как получать доступ к элементам структуры разобрался, но появились две проблемы
| Код | %struct = ( OS => { Microsoft => ["Windows 3.11","Windows 95","Windows NT", "Windows XP", "Windows 7"], Linux => ["Mandriva","Suse","Ubuntu","Kubuntu","DSL"], Apple => ["Mac OS"], Members => [ { name => "Bill Geths", company => "Microsoft", age => 45 }, { name => "Linus Torvalds", company => "Linux", age => 37 }, { name => " ", company => unef, age => 22 }, ], }, );
while (my ($key, $value) = each %struct) { find($value); }
sub find { my ($value) = @_; my $ref = ref $value; if ( $ref eq 'HASH' ) { while ( ( $k, $v) = each %$value ) { find($v); } }elsif( $ref eq 'ARRAY' ) { for ( $i = 0; $i < @$value; $i++ ) { find($value->[$i]); } } }
|
Если перед вызовом рекурсий выводить значение то они выводятся без проблем, но используя пример выше приведенной ссылки где используется конструкция Data::Dumper пишет что вообще нечего не найдено
| Код | while (my ($key, $value) = each %struct) { if ( my $found = find($value) ) { print $found, ":\n", Dumper(eval "$found"); }else{ print "Not found\n"; } }
sub find { my ($value) = @_; my $ref = ref $value; if ( $ref eq 'HASH' ) { while ( ( $k, $v) = each %$value ) { if (my $hash = find($v) ) { return $hash; } } }elsif( $ref eq 'ARRAY' ) { for ( $i = 0; $i < @$value; $i++ ) { if ( my $array = find($value->[$i]) ) { return $array; } } } }
|
Выводит что нечего не найдено. Честно сказать я в тупике так как работал с структурами только два раза от силы. Удалял несколько элементов и искал пустые значение так и тут проблемы, когда в структуре нет элемента он пишет что все в порядке. Помогите провести поиск ,найти пустые элементы и произвести удаление. уже 2 суток пытаюсь решить. |