2017-01-25 7 views
0

die folgenden Fehler zu haben:Mit Hashreferenz Problem mit 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

Ändern Sie '$ s {$ e}' in '$ s -> {$ e}'? – toolic

+0

Der erste Fehler wurde behoben. Ich danke dir sehr. :) – user3047080

+0

Der zweite Fehler: Sie haben einen Array-Verweis an addtwo in Ihrer letzten Zeile übergeben. – toolic

Antwort

1

Bitte hinzufügen use strict und use warnings 'all' an die Spitze der jedes Perl Programm, das Sie schreiben. Es ist kein Sicherheitsnetz für Anfänger: Es ist für jede professionelle Programmierung

Neben %s wesentlich ist, haben Sie nicht $c oder $e erklärt, und es gibt sehr wenig Sinn, mit my überhaupt, wenn Sie mindestens use strict in Wirkung

eine „Lösung“ anbieten zu können wäre sehr neu zu schreiben, was Sie hinstellen haben, so dass ich denke, dass es am besten ist, dass Sie den Rat implementieren, die Sie bisher gegeben habe

Aber bitte versuchen Sie, wie ich schrieb in meinem Kommentar, um kleine Teile Ihres Programms zu schreiben, und um sicherzustellen, dass Sie eine solide Grundlage haben Wenn Sie weitere Funktionen hinzufügen möchten