2017-01-25 70 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 strictuse warnings 'all'頂部,你寫的每一個 Perl程序。這不是一個初學者的安全網:它是任何專業的編程

基本的以及%s,你還沒有宣佈$c$e,並有很少的一點就是在使用my水平,除非你至少use strict有效

提供一個「解決方案」將重寫大部分的你已經放下了,所以我覺得你實現你已經被賦予到目前爲止

的意見,但請不要嘗試,因爲我是最好的在我的評論中寫道,一次只寫一小段程序,並確保你有一個堅實的基礎當你想添加更多的功能