Wie kann ich feststellen, ob eine Gruppe von Parens im Perl-Code als Gruppierung von Paren oder als Liste fungiert?

7

In Perl werden Klammern verwendet, um die Priorität zu überschreiben (wie in den meisten Programmiersprachen), sowie um Listen zu erstellen. Wie kann ich feststellen, ob ein bestimmtes Paar von Parens als Gruppierungskonstrukt oder als Ein-Element-Liste behandelt wird?

Zum Beispiel bin ich mir ziemlich sicher, dass dies eine Skalar-Liste und keine Ein-Element-Liste ist: (1 + 1)
Aber was ist mit komplexeren Ausdrücken? Gibt es eine einfache Möglichkeit zu sagen?

    
Ryan Thompson 22.05.2010, 02:43
quelle

2 Antworten

16

Drei wichtige Prinzipien sind hier nützlich:

Kontext ist König. Die Auswertung Ihres Beispiels (1 + 1) hängt vom Kontext ab.

%Vor%

In einem skalaren Kontext gibt es keine Liste . Um dies zu sehen, versuchen Sie, als Liste einer Skalarvariablen zuzuweisen. Die Art und Weise, darüber nachzudenken, besteht darin, sich auf das Verhalten des Komma-Operators zu konzentrieren: Im skalaren Kontext wertet es sein linkes Argument aus, wirft diesen Wert weg, wertet dann sein rechtes Argument aus und gibt diesen Wert zurück. Im Listenkontext fügt der Kommaoperator beide Argumente in die Liste ein.

%Vor%

Klammern erstellen keine Listen . Der Komma-Operator erstellt die Liste (vorausgesetzt, wir befinden uns im Listenkontext). Wenn Sie Listen in Perl-Code eingeben, werden die Klammern aus Gründen der Priorität benötigt - nicht aus Gründen der Listenerstellung. Ein paar Beispiele:

  • Die Klammern haben keine Wirkung: Wir evaluieren ein Array im Skalar Kontext, so dass die rechte Seite die Array-Größe zurückgibt.

    %Vor%
  • Klammern sind nicht erforderlich, um eine Liste mit einem Element zu erstellen.

    %Vor%
  • Aber Klammern werden mit mehreren Elementen benötigt - aus Vorranggründen.

    %Vor%
FMc 22.05.2010, 03:37
quelle
8
  1. Kontext.
  2. Klammern haben nicht die Rolle, die Sie bei der Erstellung einer Liste haben.

Beispiele:

%Vor%

Grob gesagt trennt der Kommaoperator im Listenkontext Elemente einer Liste; Im skalaren Kontext ist der Kommaoperator das C "serielle Komma", das seine linke und rechte Seite auswertet und den Wert der rechten Seite zurückgibt. Im skalaren Kontext gruppieren die Ausdrücke in Klammern die Reihenfolge der Operationen und im Listenkontext bedeuten Klammern genau das Gleiche. Der Grund für die Zuordnung zu Arrays ist folgender:

%Vor%

Was Ihre Frage anbelangt, "ist es eine skalare oder eine Liste mit einem Element?", ist es einfach keine sinnvolle Frage, einen Ausdruck isoliert zu betrachten, aufgrund des Kontexts. Im Listenkontext ist alles eine Liste; im skalaren Kontext ist nichts.

Empfohlene Lektüre: perlop , perldata , Programmierung Perl .

    
hobbs 22.05.2010 03:43
quelle

Tags und Links