Was macht '@_' in Perl?

8

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 @_?

    
Levi 17.01.2009, 04:09
quelle

4 Antworten

21

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:

%Vor%

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:

%Vor%

Die Verwendung einer Methode ist eine Frage des Geschmacks. Ich habe genau diese Frage gestellt cowgod 17.01.2009, 04:43

quelle
11

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.

    
brian d foy 17.01.2009 09:17
quelle
9

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.

%Vor%

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.

    
Brad Gilbert 17.01.2009 05:29
quelle
5

Die Variable @_ ist ein Array (daher das Präfix @ ), das alle Parameter für die aktuelle Funktion enthält.

    
1800 INFORMATION 17.01.2009 04:14
quelle

Tags und Links