Ich schaute mir einen Code an, den ich in meiner Perl-Klasse geschrieben hatte, und ich bemerkte das.
%Vor%Ich frage mich zwei Dinge: Die erste Zeile, in der die Variable in Klammern steht, das ist etwas, das Sie tun, wenn Sie mehr als eine Variable deklarieren, und wenn ich sie entfernen würde, würde es immer noch funktionieren?
Die zweite Frage wäre, was macht das @_?
Die Variable @_
ist ein Array, das alle Parameter enthält, die an ein Unterprogramm übergeben werden.
Die Klammern um die Variable $string
sind absolut notwendig. Sie geben an, dass Sie Variablen aus einem Array zuweisen. Ohne sie wird das Array @_
$string
in einem skalaren Kontext zugewiesen, was bedeutet, dass $string
gleich der Anzahl der Parameter ist, die an das Unterprogramm übergeben werden. Zum Beispiel:
Die Ausgabe hier ist 1 - definitiv nicht, was Sie in diesem Fall erwarten.
Alternativ können Sie die Variable $string
zuweisen, ohne das Array @_
zu verwenden und stattdessen die Funktion shift
zu verwenden:
Die Verwendung einer Methode ist eine Frage des Geschmacks. Ich habe genau diese Frage gestellt cowgod 17.01.2009, 04:43
Wenn Sie in Perl auf eine spezielle Variable (oder Interpunktion) stoßen, lesen Sie die perlvar-Dokumentation . Es listet sie alle auf, gibt Ihnen ein Englisch Äquivalent und sagt Ihnen, was es tut.
Perl hat zwei verschiedene Kontexte, einen skalaren Kontext und einen Listenkontext. Ein Array '@_
'gibt bei Verwendung im skalaren Kontext die Größe des Arrays zurück.
Bei diesen beiden Beispielen gibt Ihnen die erste die Größe des Arrays @_
und die andere das erste Element.
Perl hat drei 'Default'-Variablen $_
, @_
und je nachdem, wen Sie %_
fragen. Viele Operationen verwenden diese Variablen, wenn Sie ihnen keine Variable zur Bearbeitung geben. Die einzige Ausnahme ist, dass es keine Operation gibt, die standardmäßig %_
verwendet.
Zum Beispiel haben wir push
, pop
, shift
und unshift
, die alle ein Array als ersten Parameter akzeptieren.
Wenn Sie ihnen keinen Parameter zuweisen, verwenden sie stattdessen die Variable 'default'. '% Co_de%' ist also dasselbe wie ' shift;
'
Wie Subroutinen entworfen wurden, konnten Sie dem Compiler nicht formal mitteilen, welche Werte Sie in welchen Variablen haben wollten. Nun, es war sinnvoll, nur die 'Standard' Array-Variable ' shift @_;
' zu verwenden, um die Argumente zu halten.
Diese drei Subroutinen sind also (fast) identisch.
%Vor% Ich denke, der erste ist etwas schneller als die anderen beiden, weil Sie die Variable @_
nicht verändern.
Die Variable @_
ist ein Array (daher das Präfix @
), das alle Parameter für die aktuelle Funktion enthält.