subroutine

___ tag123perl ___ Perl ist eine prozedurale, allgemeine Programmiersprache für allgemeine Zwecke, die für ihre native Unterstützung von regulären Ausdrücken und String-Parsing-Funktionen bekannt ist. Bitte verwenden Sie diesen Tag für Fragen zu Perl im Allgemeinen. Für Dinge, die mit der neuen (aber verwandten) Sprache "Perl 6" zu tun haben, verwenden Sie bitte das perl6-Tag. Verwenden Sie für reguläre Ausdrücke nach Perl-Art in anderen Sprachen das Regex-Tag oder, falls sie auf der PCRE-Bibliothek basieren, das PCRE-Tag. ___ tag123hash ___ Eine Hash-Funktion ist eine wohldefinierte Prozedur oder mathematische Funktion, die eine große Datenmenge in ein kleines Datum umwandelt, normalerweise eine ganze Zahl. Bei Fragen zum Twitter- und Facebook-Symbol verwenden Sie den Hashtag. Bei Fragen zu URLs und HTML-Ankern verwenden Sie die Fragment-ID. Bei Fragen zu Rubys Hash-Typ verwenden Sie Ruby-Hash. Eine Unterroutine (z. B. eine Prozedur oder ein Unterprogramm) ist ein Teil des Codes innerhalb eines größeren Programms, der eine bestimmte Aufgabe ausführt und relativ unabhängig von dem verbleibenden Code sein kann. Die Syntax vieler Programmiersprachen umfasst die Unterstützung für das Erstellen von eigenständigen Unterprogrammen sowie für das Aufrufen und Zurückkehren von ihnen. Sie sind in vielerlei Hinsicht ähnlich wie Funktionen, haben aber normalerweise Nebenwirkungen außerhalb des einfachen "Rückgabewerts", der die Rückgabe bewirkt. ___ qstntxt ___

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.

    
___ answer10135771 ___

Dies macht eine (flache) Kopie von %code% :

%Vor%

Der Hash-Verweis %code% zeigt immer noch auf %code% aber %code% 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 %code% . Im Array-Fall erstellen Sie niemals eine Kopie, sondern de-referentieren Sie sie direkt:

%Vor%

und die Änderung in %code% wird in %code% angezeigt.

    
___ qstnhdr ___ Perl modifiziert die Hash-Referenz in der Subroutine ___
2
Antworten

Perl: Wie lexikalisches Datei-Handle an eine Subroutine übergeben und als benanntes Argument verwendet werden?

Ich möchte ein lexikalisches Datei-Handle an eine Subroutine unter Verwendung eines benannten Arguments übergeben, aber Folgendes kompiliert nicht: %Vor% Die Beschwerde lautet: %Vor% Es funktioniert O.K. Wenn ich die primitive Technik de...
25.06.2010, 18:26
1
Antwort

Perl modifiziert die Hash-Referenz in der Subroutine

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 e...
13.04.2012, 05:22