2017-01-25 4 views
0

Имея следующие ошибки:Имея HASH ссылка вопрос с Perl

Name "main::s" used only once: possible typo at line 22.

Not a HASH reference at line 5.

sub addtwo { 

    my $params = shift; 

    my $s = $params->{structure}; 

    if (ref($s) eq "LIST") { 

     $c = 0; 

     foreach $e (@{$s}) { 
      $s->[$c] = addtwo({ structures => $e }); 
      $c++; 
     } 
    } 
    elsif (ref($s) eq "HASH") { 

     if (scalar keys %{$s} == 0) { 
      return undef; 
     } 
     else { 
      foreach my $e (values %{$s}) { 
       $s{$e} = addtwo({ structure => $s->{$e} }); 
      } 
     } 
    } 
    else { 
     $s = 1; 
    } 

    return $c; 
} 

print addtwo(
    [ 
     { a => 1, b => 2, c => 3 }, 
     { d => 4, e => 5 }, 
     [ 6, 7, 8 ], 
     9, 
     10, 
     11, 
     [ 12, 13, 14 ] 
    ] 
); 
+2

Изменить '$ s {$ e}' на '$ s -> {$ e}'? – toolic

+0

Исправлена ​​первая ошибка. Огромное спасибо. :) – user3047080

+0

Вторая ошибка: вы передали ссылку на массив addtwo в своей последней строке. – toolic

ответ

1

Пожалуйста добавить use strict и use warnings 'all' к началу каждый программы Perl вы пишете. Это не подстраховка новичка: это важно для любого профессионального программирования

Как %s, вы не объявили $c или $e, и там очень мало смысла в использовании my вообще, если у вас есть по крайней мере use strict фактически

чтобы предложить «решение» было бы переписать большую часть того, что вы положили вниз, так что я думаю, что лучше, что вы реализуете совет, который вы получили до сих пор

Но, пожалуйста, попробуйте, как я написал в моем комментарии, чтобы писать крошечные биты вашей программы за раз, и чтобы убедиться, что у вас есть прочная основа когда вы хотите добавить дополнительную функциональность