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.
Dies macht eine (flache) Kopie von %hashVal
:
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:
Damit bleiben Ihre Änderungen in %hashVal
. Im Array-Fall erstellen Sie niemals eine Kopie, sondern de-referentieren Sie sie direkt:
und die Änderung in $arrVal
wird in @arrVal
angezeigt.
Tags und Links perl hash subroutine