Perl modifiziert die Hash-Referenz in der Subroutine

7

Ich habe Probleme, die Hash-Referenzen zu verstehen und den Hash an Ort und Stelle zu ändern, anstatt ihn zurückzugeben. Ich möchte eine Subroutine schreiben, die einen Wert von Hash zurückgibt und auch den Hash ändert. Beim Codieren hatte ich einige Probleme. Also habe ich den folgenden grundlegenden Code geschrieben, um zu verstehen, wie man den Hash an Ort und Stelle verändert.

%Vor%

Die beobachtete Ausgabe ist:

%Vor%

Aus der Ausgabe folgerte ich, dass Änderungen an hashDeref die Daten in der Referenz nicht verändern. Ist mein Verständnis richtig? Gibt es eine Möglichkeit, die Hash-Variable an Ort und Stelle zu ändern, anstatt sie zurückzugeben.

    
Sid 13.04.2012, 05:22
quelle

1 Antwort

19

Dies macht eine (flache) Kopie von %hashVal :

%Vor%

Der Hash-Verweis $hashRef zeigt immer noch auf %hashVal aber %hashDeref nicht, es ist nur eine Kopie. Wenn Sie die übergebene Hash-Ref in-Place ändern wollen, dann arbeiten Sie mit dem übergebenen Hash-Ref:

%Vor%

Damit bleiben Ihre Änderungen in %hashVal . Im Array-Fall erstellen Sie niemals eine Kopie, sondern de-referentieren Sie sie direkt:

%Vor%

und die Änderung in $arrVal wird in @arrVal angezeigt.

    
mu is too short 13.04.2012, 05:38
quelle

Tags und Links