Perl mit dem Sonderzeichen &

8

Ich hatte eine kleine Frage. Ich las etwas Code und da meine Schule mir nichts Nützliches über Perl-Programmierung beibrachte, bin ich hier, um euch Leute zu fragen. Ich sehe diese Zeile viel in einigen Perl-Programmen verwendet:

%Vor%

Ich weiß nicht, was das & -Zeichen hier bedeutet, da ich es nie in Perl sage. Und das something ist ein Unterprogramm (ich rate). Es sagt normalerweise einen Namen und es hat manchmal Argumente wie eine Funktion. Kann mir jemand sagen, wofür & hier steht und was diese something die ganze Zeit ist.

Die Variable nimmt eine Art von Rückgabewert an und wird dann verwendet, um einige Bedingungen zu überprüfen, was mich zu der Annahme bringt, dass es sich um eine Subroutine handelt. Aber warum noch die & ?

Danke

    
ban 18.06.2013, 16:06
quelle

2 Antworten

14

In älteren Versionen von Perl wurde & zum Aufruf von Subroutinen verwendet. Nun ist das nicht notwendig und \& wird meistens verwendet, um ein reference zur Subroutine zu nehmen,

%Vor%

oder Funktionsprototyp ignorieren ( Ссылка )

Anders als beim Verweisen auf Unterroutinen & ist bitwise and operator,

Ссылка

    
Сухой27 18.06.2013, 16:11
quelle
28

Praktisch jedes Mal, wenn Sie & außerhalb von \&foo und EXRP && EXPR sehen, handelt es sich um einen Fehler.

  • &foo(...) ist das gleiche wie foo(...) , außer dass der Prototyp von foo ignoriert wird.

    %Vor%

    Nur Unterroutinen (keine Operatoren) werden von &foo(...) aufgerufen.

    %Vor%

    Sie werden dieses Feature wahrscheinlich nie in Ihrer gesamten Programmierkarriere verwenden müssen. Wenn Sie sehen, dass es verwendet wird, ist es sicherlich jemand, der & verwendet, wenn dies nicht der Fall ist.

  • &foo ist ähnlich wie &foo(@_) . Der Unterschied besteht darin, dass Änderungen an @_ in foo sich auf die @_ des aktuellen Unterelements auswirken.

    Sie werden dieses Feature wahrscheinlich nie in Ihrer gesamten Programmierkarriere verwenden müssen. Wenn Sie sehen, dass es verwendet wird, ist es sicherlich jemand, der & verwendet, wenn sie es nicht tun sollten, oder ein törichter Optimierungsversuch. Das Folgende ist jedoch ziemlich elegant:

    %Vor%
  • goto &foo ist ähnlich wie &foo , außer dass die aktuelle Subroutine zuerst aus dem Aufruf-Stack entfernt wird. Dies führt dazu, dass es beispielsweise nicht in Stack-Traces angezeigt wird.

    Sie werden dieses Feature wahrscheinlich nie in Ihrer gesamten Programmierkarriere verwenden müssen. Wenn Sie es sehen, ist es sicherlich ein törichter Versuch der Optimierung.

    %Vor%
  • $& enthält, was mit der Übereinstimmung des letzten Regex-Ausdrucks übereinstimmt. Vor 5.20 führt dies dazu, dass jeder Regex in Ihrem gesamten Interpreter langsamer wird (wenn sie keine Captures haben), also verwenden Sie diesen nicht.

    %Vor%
  • defined &foo ist eine vollkommen legitime Methode, um zu überprüfen, ob eine Subroutine existiert, aber das wird Sie wahrscheinlich nie brauchen. Es gibt auch exists &foo ist ähnlich, aber nicht so nützlich.

  • EXPR & EXPR ist der bitweise UND-Operator. Dies wird verwendet, wenn es sich um Systeme auf niedriger Ebene handelt, die mehrere Informationen in einem einzigen Wort speichern.

    %Vor%
  • &{ EXPR }() (und &$ref() ) ist ein Unterprogrammaufruf über eine Referenz. Das ist eine vollkommen akzeptable und etwas gewöhnliche Sache, obwohl ich die Syntax $ref->() bevorzuge. Beispiel im nächsten Element.

  • \&foo nimmt einen Verweis auf die Subroutine foo . Dies ist eine vollkommen akzeptable und etwas gewöhnliche Sache zu tun.

    %Vor%
  • EXPR && EXPR ist der boolesche UND-Operator. Ich bin sicher, dass Sie mit diesem extrem häufigen Operator vertraut sind.

    %Vor%
ikegami 18.06.2013 16:16
quelle

Tags und Links