Übersicht || 0:Vor | 1:Ge | 2:Theo | 3:Var | 4:Op | 5:IO | 6:{} | 7:Sub | 8:OOP | 9:Rx || A:Index | B: Tab | C:Tour | D:Delta | E:Links

Variablen

Sigils

In Perl beginnen alle Variablen mit einer Sigil. Sie markieren die 3 grundlegenden Variablentypen. Die vierte ist für ausführbare Einheiten, die fünfte für Abstraktionsebenen in denen die 4 organisiert sind.

$       Skalar, einzelner Wert beliebigen Datentyps
@       Array, indizierte Liste von Skalaren
%       Hash, als zweispaltige Tabelle vorstellbar, eindeutigen Schlüsseln (IDs) (keys), sind jeweils ein Wert  (value) zugeordnet
&       code/rule/token/regex
::      Abstraktion: package / module / class / role / subset / enum / type / grammar

Die Sigils können auch als Operatoren (Kontextualisierer) verwendet werden um diese und weitere (Daten-) Kontexte zu erzwingen.

Twigils

Oder auch segundäre Sigils, die auf ein $ (scalar), @ (array) oder % (hash) folgen, sind Marker für besondere Namensräume oder Variablen mit besonderen Eigenschaften.
  $foo. . . . normale variable (oder @foo oder %foo )
  $.foo . . . autogenerierter getter/setter methode (object attribute accessor )
  $^foo . . . autogenerierte positionale Parameternamen (für alle blöcke)
  $:foo . . . autogenerierte benannte Parameternamen (für alle blöcke)
  $*foo . . . globale Variable
  $+foo . . . Umgebungsvariable
  $?foo . . . konstante compiler hint variable, Zuweisung nur zur compiletime möglich
  $=foo . . . POD-Variable
  $<foo>. . . Matchvariable, kurzform für for $/{'foo'}
  $!foo . . . expliciter privatvariable eines Objektes (accessor), auch unter Schreibweise $foo zugreifbar)
  $~foo . . . Referenz auf Parserregex dieser Teilsprache (slang) 

Spezialvariablen

Sehr viele der alten Spezialvariablen wurde abgeschafft. Fast alle der jetzigen haben eine kurze und lange Version.

  $_ . . . . . . Kontextvariable
  $! . . . . . . Fehlermeldung (Ausnahme - exception)

  $/ . . . . . . zuletzt in diesem Block erzeugtes Matchobject
  $<...> . . . . alias auf benannte capture
  $0 .. $9 . . . alias auf nummerierte capture, ehemals $1 .. $9
  @(). . . . . . Array der $0 .. $9 und übrigen enthält die über $9 hinausgehen

  $*EXECUTABLE_NAME . vorher $0
  @*ARGS . . . . Argumente (Parameter) an das Script
  $*ARGFILES . . magischer Kommandozeilen-Input-Handle 
  $*CWD. . . . . Arbeitsverzeichnis (current working dir)
  $*IN . . . . . Standardeingabe
  $*OUT. . . . . Standardausgabe
  $*ERR. . . . . Standardfehlerausgabe
  $*PERL . . . . ausführende Perlversion
  $*LANG . . . . LANG variable from %*ENV that defines what human language is used
  @*INC. . . . . include pfade (aber nicht für Standardmodule), vorher @INC
  $*PID. . . . . aktuelle prozess id
  $*GID. . . . . reale gruppen id des Prozessbesitzers
  $*UID. . . . . reale id des Prozessbesitzers
  $*EGID . . . . effektive gruppen id des Prozessbesitzers
  $*EUID . . . . effektive id des Prozessbesitzers
  $*ON_WARN. . . , ehemals $SIG{__WARN__}
  $*ON_DIE . . . , ehemals $SIG{__DIE__}
  $*EMERGENCY_MEMORY . Notfall-Speicherbereich, vorher $^M
  %*ENV. . . . . Systemumgebung
  $*KERNEL . . . auf welchem Betriebssystem laufe ich gerade
  $*DISTRO . . . Softwarepaket, unter welcher Ditribution laufe ich gerade
  $*COMPILING . . 
  $*DEBUGGING . . 
    
  $?KERNEL . . . Für welches Betriebsystem kompiliert?
  $?DISTRO . . . Für welches Betriebsystemdistribution kompiliert?
  $?ARCH . . . . Softwarepaket, Wirtarchitektur
  $?XARCH. . . . Softwarepaket, Zielarchitektur
  $?VM . . . . . auf welcher virtuellen Maschine kompiliert?
  $?XVM. . . . . auf welcher virtuellen Maschine cross-kompiliert?
  $?PERL . . . . Perlversion für die kompiliert wurde
  %?LANG . . . . Grammar, die bei kompilierung aktuell waren # What is the current set of interwoven languages?
  $?GRAMMAR. . . Welche Grammar wurde für aktuelle Zeile benutzt?
  $?FILE . . . . aktuelle Datei
  $?MODULE . . . aktuelles Modul
  $?PACKAGE. . . aktuelles paket
  ::?CLASS. .  . aktuelle Klasse (als paketname)
  $?CLASS. . . . aktuelle Klasse (als variable)
  @?CLASS. . . . aktuelle Klassen
  $?ROLE . . . . aktuelle role (als variable)
  @?ROLE . . . . aktuelle roles
  &?ROUTINE. . . aktuelle sub oder methode
  @?ROUTINE. . . aktuelle subs oder methoden
  &?BLOCK. . . . aktueller Block
  $?LABEL. . . . labels des aktuellen Blocks
  $?LINE . . . . In welcher Zeile bin ich?

  @=COMMENT. . . alle Kommentarblöcke der Datei
  $=DATA . . . . data block handle (=begin DATA ... =end)
  @=DATA . . . . das selbe als array

  $~MAIN . . . . aktueller Hauptparser 
  $~Q. . . . . . Wurzel der Zitiersprache
  $~Quasi. . . . quasiquotingsprache
  $~Regex. . . . Regexregeln 
  $~P5Regex. . . Perl 5 Regex  regeln (:P5)
  $~Trans. . . . Regeln für tr Operationen

Namensräume

Bei deklarierung kann der Geltungsbereich (Namensraum) einer Variable mit folgenden Wörtern festgelegt werden.
  MY. . . . . . Symbole im aktuellen lexikalischen Namensraum (scope aka $?SCOPE)
  OUR . . . . . Symbole des aktuellen Paketes (aka $?PACKAGE)
  CORE. . . . . äußerster lexicalischer scope, Definition von Standard Perl
  GLOBAL. . . . interpreterweite Paketsymbole, in Wirklichkeit CORE::GLOBAL
  PROCESS . . . Prozessverwandte Globals (superglobals), CORE::PROCESS
  COMPILING . . lexikalische Symbole in the scope being compiled
  CALLER. . . . Kontextsymbole in the immediate caller's lexical scope
  CONTEXT . . . Kontextsymbole in my or any caller's lexical scope

Die folgenden relativen Bezeichnungen sind auch reserviert, aber können überall im Namen benutzt werden:

  OUTER . . . . Symbole des nächtäußeren lexikalischen Geltungsbereich
  UNIT. . . . . Symbole des äußersten lexikalischen Geltungsbereiches dieser Kompilierungseinheit
  SETTING . . . lexikalische Symbole in der DSL (gewöhnlich CORE) der Einheit
  PARENT. . . . Symbole im Elternpaket des Paketes (or lexical scope)
Die folgenden sind für den Anfang von Methodenaufrufen reserviert:
  SUPER . . . . Package symbols declared in inherited classes

Datentypen

Dies ist etwas mehr low level als die vorige Tabelle und dient eher dazu dem Interpreter mitzuteilen wie viel Platz diese Variable benötigt, das er es optimieren kann.

  int1
  int2
  int4
  int8
  int16
  int32       (aka int on 32-bit machines)
  int64       (aka int on 64-bit machines)

  uint1       (aka bit)
  uint2
  uint4
  uint8       (aka byte)
  uint16
  uint32
  uint64

  num32
  num64       (aka num on most architectures)
  num128

  complex32
  complex64   (aka complex on most architectures)
  complex128

  Str

Variablentypen

In der linken Spalte seht ihr Schlüsselworte für die verschiednen logischen Typen die Variablen in Perl 6 haben können.

Undefinierte Typen

  Mu          meist undefiniert
  Failure     Fehler (lazy exceptions, ausgeworfen wenn nicht passend behandelt)
  Any         Perl 6-Objekt (default Parametertyp einer Routine, ausser Junctions)
  Cool        Perl 6 geeignete Schleifenrückhalt "Convenient OO Loopbacks"
  Whatever    Platzhalter (wie Any, wird aber durch eine MMD im Sinne "tu was ich meine" augelöst)
  Int         beliebiges Integerobjekt
  Widget      beliebiges Widgetobjekt

Unveränderliche Typen

  Str         Perl String (endliche Sequenz aus Unicode Zeichen)
  Bit         einzelnes Perl Bit (erlaubt traits, aliasing, undef, etc.)
  Int         Perl Integer (erlaubt Inf/NaN, beliebige Genauigkeit, etc.)
  Num         Perl Zahlen
  Rat         Perl gebrochene Zahl (genaue Real, begrenzter Nenner)
  FatRat      Perl gebrochene Zahl (unbegrenzte Genauigkeit in beiden Teilen)
  Complex     Perl komplexe Zahlen (Zahlen mit i Anteil)
  Bool        Perl boolean (Bool::True oder Bool::False)
  Exception   Perl Ausnahme
  Block       ausführbaren Objekte mit lexikalischem Bereich für Variablen
  Seq         eine Liste an Werten (kann erst spät  (oder auch bequem - lazy) erzeugt werden)
  Range       ein Paar geordneter Endpunkte; erzeugt Unveränderbare (immutables) wenn iteriert
  Set         ungeordnete Wertesammlung das mehrfache Vorkommen nicht erlaubt
  Bag         ungeordnete Wertesammlung das Mehrfachvorkommen erlaubt
  Enum        ein unveränderliches Paar (Pair)
  EnumMap     Mapping von Enums mit eindeutigen Schlüsseln (fixer Hash)
  Signature   Parameter einer Funktion  (linksseites Binding)
  Parcel      Argumente in kommagetrennter Liste
  Slicel      Argumente in semikolongetrennter Liste (oder equiv, wie Z)
  Capture     Argumente eines Funktionsaufruf (rechtsseites Binding)
  Blob        eine undifferenzierte Masse von Bits
  Instant     ein Punkt in einem durchgängigen, aus atomaren Zeipunkten bestehenden, Zeitstrahl
  Duration    der Unterschied zwischen 2 Instant (Zeitpunkten)
  HardRoutine eine Routine, die sich nicht ändern möchte

Veränderliche Typen

  Iterator    Perl Liste
  SeqIter     Iterator über Seq
  RangeIter   Iterator über Range
  Scalar      Perl-Skalar
  Array       Perl-Array
  Hash        Perl-Hash
  KeySet      KeyHash of Bool (ein Set im listen/array Kontext)
  KeyBag      KeyHash of UInt (ein Bag im listen/array Kontext)
  Pair        einzelne Schlüssel-zu-Wert Assoziation
  PairSeq     eine Seq (Sequenz) Aus Paaren (Pair)
  Buf         Perl buffer (ein Array aus stringartigen Speicherplätzen)
  IO          Perl-Datei-Handle
  Routine     Basisklasse für alle "wrap"-fähigen, ausführbaren Objekte
  Sub         Perl-Subroutine
  Method      Perlmethode
  Submethod   Perl-Subroutine, die sich wie eine Methode verhält
  Macro       zur Kompilierungszeit ausgeführte Perl-subroutine
  Regex       Perl Suchmuster
  Match       Perl Suchfund, normalerweise durch Anwendung einer Regex gebildet
  Stash       ein Hash (package, module, class, lexpad, etc) in der Symboltabelle
  SoftRoutine Routine die veränderlich bleiben will

Introspektion

von Objekten

  WHAT        prototyp des objekttyps, Kurzname im Stringkontext
  WHICH       ID des Objektes
  WHO         package, daß dieses Objekt unterstützt, langer Name im Stringkontext
  WHERE       Speicheradresse des Objektes
  HOW         Object der Metaklasse: "Higher Order Workings"
  WHEN        (reserviert für Ereignisse (events) ?)
  WHY         (reserviert für Dokumentation?)
  WHENCE      autovivification von closures (Blöcken)

Operatoren

Vorrangtabelle

V steht für Vorrang (ob linke (L) oder rechte (R) Seite des Operators bevorzugt), aka Assoziativität, siehe nächste Tabelle.

  V  Level               Beispiele
  =  =====               ========
  N  Ausdrücke           42 3.14 "eek" qq["foo"] $x :!beliebig @$array
  L  Methoden postfix    .name .+ .? .* .() .[] .{} .<> .«» .:: .= .^ .:
  L  Autoinkrement       ++ --
  R  potenzieren         **
  L  symbolische unäre   ! + - ~ ? | +^ ~^ ?^ \ ^ =
  L  multiplizierende    * / % +& +< +> ~& ~< ~> ?& div mod
  L  addierende          + - +| +^ ~| ~^ ?| ?^
  N  wiederhohlend       x xx
  L  verbindend          ~
  X  junctives und       &    (all)
  X  junction oder       | ^  (any)
  L  benannte unäre      rand sleep abs etc.
  N  nichtkettend infix  but does <=> leg cmp .. ..^ ^.. ^..^
  C  verkettend infix    != == < <= > >= eq ne lt le gt ge ~~ === eqv !eqv
  L  und (hoh. Vorrang)  &&
  L  oder (hoh. Vorrang) || ^^ // min max
  L  bedingt             ?? !! ff fff
  R  Zuweisungen         = := ::= => += -= **= xx= .=
  L  schwache unäre      true not
  X  Kommaoperator       , p5=>
  X  listen op (infix)   Z minmax X X~ X* Xeqv
  R  listen op (prefix)  : print push say die map substr ... [+] [*] any $ @
  L  schwaches und       and andthen
  L  schwaches oder      or xor orelse
  N  Ausdruck Begrenzer  ; <==, ==>, <<==, ==>>, {...}, Ausdruckmodifikatoren, unless, extra ), ], }

Assotiativität

  V  Assoziation   setzt $a op $b op $c wie folg um:
  =   ===========   =================================
  L   links         ($a op $b) op $c
  R   rechts         $a op ($b op $c)
  N   keine          ILLEGAL
  C   verkettend    ($a op $b) and ($b op $c)
  X   liste          op($a, $b, $c) or op($a; $b; $c)

Kategorien

Um Operatoren oder Schlüsselwörter mit einem Macro selber zu erstellen, muß bei der Definition die Kategorie angegeben werden.

  category:<prefix>
  circumfix:<( )>
  dotty:<.>
  infix:<+>
  infix_circumfix_meta_operator:{'»','«'}
  infix_postfix_meta_operator:<=>
  infix_prefix_meta_operator:<!>
  package_declarator:<class>
  postcircumfix:<( )>
  postfix:<++>
  postfix_prefix_meta_operator:{'»'}
  prefix:<++>
  prefix_circumfix_meta_operator:{'',''}
  prefix_postfix_meta_operator:{'«'}
  q_backslash:<\\>
  qq_backslash:<n>
  quote_mod:<c>
  quote:<q>
  regex_assertion:<?>
  regex_backslash:<w>
  regex_metachar:<.>
  regex_mod_internal:<i>
  routine_declarator:<sub>
  scope_declarator:<my>
  sigil:<$>
  special_variable:<$!>
  statement_control:<if>
  statement_mod_cond:<if>
  statement_mod_loop:<while>
  statement_prefix:<do>
  term:<*>
  trait_auxiliary:<is>
  trait_verb:<of>
  twigil:<?>
  type_declarator:<subset>
  version:<v>

Metaoperatoren

Metaoperatoren werden mit einem beliebigen einfachen Operator kombiniert (ihm voran gestellt), um ihn zu parallelisieren oder sonstwie erweitert oder verändert anzuwenden. In den Beispielen steht W für Wert L für linker wert und R für rechts und E für Ergebnis. Eine nachstehende zahl ist der index eines Arrays.
  =  selbstzuweisend   Zuweisung in den linken Operanden (wie aus P5 bekannt)
                       $L op= $R entspricht: $L = $L op $R 
  !     negierend      Ergebnis wird negiert (wie aus P5 bekannt)
                       $L !op $R entspricht: !($L op $R )
  R     reverse        vertauscht Operatoren
                       $E = $L Rop $R entspricht: $E = $R op $L
  S     sequence       erzwingt sequentielle Ausführung - verbietet jede parallel Ausführung
  >>    hyper          verarbeitet parallel (eager) Arrays oder wendet einzelnen Wert auf Array an; 
                       Spitze zeigt zur Seite, die Dimensionalität des Ergebnisses vorgibt
                       @E = $L op>> @R entspricht: @E = $L op R1, $L op R2, ...;
                       @E = @L op>> @R entspricht: @E = L1 op R1, L2 op R2, ...;
  [ ]  .reduce()       wendet den Op auf einen Array von Werten an; 
                       $E = [op] @W entspricht: $E = W1 op W2 op  ...;
  [\ ] .triangle()     ähnlich wie vorher, erzeugt aber einen Array surch:
                       @E = W1, W1 op W2, W1 op W2 op W3,  ...;
  X    .crosswith()    wendet op auf alle Paare eines Kartesischen Prokuktes an;
                       @E = L1 op R1,  L1 op R2,  L2 op R1, L2 op R2...;
  Z    .zipwith()      verbindet Listenelemente gleicher Position mit dem Operator zu Element der Ergenisliste; wie hyper nur lazy
                       @E = L1 op R1,  L2 op R2 ...;

Unicodeoperatoren

<< >> können auch mit den Unicode symbolen "Chevron" geschrieben werden.
  « aka <<
  » aka >>

Kontextualisierer

Sind prefixe Operatoren oder Funktionen die diverse Kontexte von Variablentypen und Datentypen erzwingen können.
  $()    scalar()    skalarer Kontext
  @()    array()     Arraykontext
  @@()   slice()     Slicekontext
  %()    hash()      Hashkontext
  ?                  boolscher Kontext
  +                  numerischer kontext
  ~                  Stringkontext
  |                  überführt Captureobjekte in eine Argumentenliste
  ||                 überführt Captureobjekte in eine Semikolonliste
  &                  Kodereferenz

Dateitestoperatoren

Die werden mit smartmatch (~~) angewendet oder als methode des Dateihanles. "datei.txt" ~~ :e ; $dateiname.e
  :r   Datei ist lesbar von effektiven uid/gid
  :w   Datei ist beschreibbar von effektiven uid/gid
  :x   Datei ist ausführbar von effektiven uid/gid
  :o   effektive uid besitzt Datei

  :R   Datei ist lesbar von realen uid/gid
  :W   Datei ist schreibbar von realen uid/gid
  :X   Datei ist ausführbar von realen uid/gid
  :O   reale uid besitzt Datei

  :e   Datei existiert
  :s   Datei hat Größe größer 0

  :f   Datei ist eine einfache Datei
  :d   Datei ist ein Verzeichnis
  :l   Datei is ein symbolische Verknüpfung
  :p   Datei ist eine benannte pipe (FIFO), oder der Dateihandle ist eine pipe
  :S   Datei ist ein socket
  :b   Datei ist eine block special Datei (z.B. HDD, RAM-Bereich, CDROM)
  :c   Datei ist eine character special Datei (z.B. terminals, modems)
  :t   Dateihandle ist geöffnet zu einem tty (terminal)

  :u   Datei hat setuid bit gesetzt
  :g   Datei hat setgid bit gesetzt
  :k   Datei hat sticky bit gesetzt

Smartmatch

$_ X Type of Match Wanted What to use on the right
Array Num array element truth .[X]
Array Num array contains number *,X,*
Array Str array contains string *,X,*
Array Seq array begins with seq X,*
Array Seq array contains seq *,X,*
Array Seq array ends with seq *,X
Hash Str hash element truth .{X}
Hash Str hash key existence .{X}:exists
Hash Num hash element truth .{X}
Hash Num hash key existence .{X}:exists
Buf Int buffer contains int .match(X)
Str Char string contains char .match(X)
Str Str string contains string .match(X)
Array Scalar array contains item .any = X
Str Array array contains string X.any
Num Array array contains number X.any
Scalar Array array contains object X.any
Hash Array hash slice exists .{X.all}:exists .{X.any}:exists
Set Set subset relation .{X}:exists
Set Hash subset relation .{X}:exists
Any Set subset relation .Set.{X}:exists
Any Hash subset relation .Set.{X}:exists
Any Set superset relation X.{$_}:exists
Any Hash superset relation X.{$_}:exists
Any Set sets intersect .{X.any}:exists
Set Array subset relation X,* # (conjectured)
Array Regex match array as string .Cat.match(X); cat(@$_).match(X)

Kommentierops

Quoting bedeutet zitieren, also in Anführungszeichen stellen. "Q", der einfachste, generische Anführungsoperator wandelt den umschlossenen Text in einen String um, ohne jede Bearbeitung. Diese wird mit den beigefügten Adverbien gesteuert. Und so entsprechen die bekannten quoting operatoren einem "Q" mit folgenden Beifügungen.
  q//         Q :q //
  ' '         Q :q //
  qq//        Q :qq //
  " "         Q :qq //
  qw//        Q :q :w //
  < >         Q :q :ww //
  << >>       Q :qq :ww //
  qp//        Q :p //
  qx//        Q :x //
  rx//        Q :regex //
  m///        Q :match ///
  mm///       Q :match :sigspace ///
  s///        Q :subst ///
  ss///       Q :subst :samespace ///
  tr///       Q :trans ///

Textverarbeitung

Kommentieradverbien

Es gibt noch weit mehr Adverbien, die selbstverständlich jedem Kommentieroperator, beigefügt werden können wie z.B.: q:s/.../. Die genannten Adverbien sind in Wirklichkeit Sammelbefehle für mehrere Adverbien, mit denen sich die Wirkungsweise noch feiner abstimmen läßt.
  kurz     lang                Bedeutung
  ----    ------         ----------------------------------
  :x      :exec          führt aus und fügt Ergebnis ein (ehemals qx() )
  :w      :words         spaltet Ergebnis in Worte ("" werden normale Zeichen)  (ehemals qw())
  :ww     :quotewords    spaltet Ergebnis in Worte (beachtet Anführungszeichen)
  :q      :single        interpoliert \\, \q und \' (oder whatever)
  :qq     :double        interpoliert mit :s, :a, :h, :f, :c, :b
  :s      :scalar        interpoliert $ variablen
  :a      :array         interpoliert @ variablen
  :h      :hash          interpoliert % variablen
  :f      :function      interpoliert & Aufrufe
  :c      :closure       interpoliert {...} Ausdrücke (Blöcke)
  :b      :backslash     interpoliert Steuerzeichen (\n, \t, ...), impliziert mind. :q
  :p      :path          Dateipfadangaben
  :to     :heredoc       bestimmt parameter als heredoc terminator
          :regex         liest ein als regex
          :match         liest ein als regex und wendet sie zur Suche an
          :subst         liest ein als Ersetzung
          :trans         liest ein als Transliteration
          :code          liest ein als Quellcode (Quasiquoting)

Regex Modifikatoren

Das sind Adverbien die nach dem regex-Befehl eingefügt werden (wie :i in m :i / .../), um das Verhalten der Regex zu steuern, den Suchbereich einzugrenzen und um vornhinein klarzustellen, wonach gesucht wird.
 kurz        lang                         Bedeutung
 ----    -------------        ---------------------------------------------
 :g      :global              sucht nach jedem Vorkommen anstatt nur einmal
 :x(n)                        sucht nur n Vorkommen
 :nth(n) :1st :2nd :3rd :5th  sucht das n-te Vorkommen
 :c(n)   :continue            sucht ab der Position n (ab 0)
 :p(n)   :pos                 sucht nur an der Position n (ab 0)
 :ov     :overlap             sucht an allen Positionen einmal (aktiviert Backtracking)
 :ex     :exhaustive          sucht an allen Positionen so oft wie fündig (aktiviert Backtracking)
         :ratchet             deaktiviert backtracking
         :panic               überschreibt mögliches :ratchet aller Teilregex (aktiviert Backtracking)
         :keepall             Teilregex sollen sich alles merken
 :rw                          Regex hat das Recht den String zu ändern
 :s      :sigspace            Leerzeichen sind Trenner zw. Teilausdrücken, keine zu suchenden Leerzeichen
 :ss     :samespace           Ersetzen mit :s, Fund von Wort 1 zu 1. Ausdruck usw.  (ss/aht udn/hat und/;)
 :i      :ignorecase          beachtet Gross/kleinschreibung nicht
 :ii     :samecase            ersetzter String beachten Gross/kleinschreibung des Fundes
 :a      :ignoreaccent        Buchstaben mit & ohne Akzent (Strich o. Symbol darüber) sind gleich
 :aa     :sameaccent          ahmt beim Ersetzten Akzente des Fundes nach
         :bytes               nimmt Bytes als Atome
         :chars               sucht auf Zeichenebene
         :codes               codepoints markieren Positionen
         :graphs              sprachunabhängige Grapheme werden gesucht
 :P5     :Perl5               benutze Perl 5 Regex Syntax und Regeln

Regex Metazeichen

Innerhalb einer Regex haben folgende Zeichen eine besondere Bedeutung.

  .         beliebiger Buchstabe
  ^         Stringanfang
  $         Stringende
  ^^        Zeilenanfang
  $$        Zeilenende
  ( )       umschließt Teilregex (Gruppe) deren Ergebnis erfasst/gespeichert (capture) wird
  [ ]       nicht erfassende/gespeicherte Gruppe
  { }       closure, auszuführender Block innerhalb der Regex
  < >       suche eine Teilregel (subrule)
  **        multipliziert (verfielfacht) Zeichen oder Teilregex (links) um Anzahl (rechts)
  |         verknüpft alternative Muster (oder-Verbindung (OR))
  &         verknüpft Muster die aller erfüllt sein müssen (AND)
  \         leitet escape sequenzen und Steuerzeichen ein     
  #         eröffnet Kommentar der bis zum Zeilenende geht
  :=        bindet suchfund an hypothetische Variable

Steuerzeichen

Folgende Sequenzen werden in Zitaten bei aktiviertem ":b" oder ":backslash" (in "", qq und <<>> inklusive) zu nicht sichtbaren Steuerzeichen evaluiert. Sie gelten auch innerhalb von Regexen, weswegen sie alle auch in der nachfolgenden Liste erscheinen.
  \a          BELL
  \b          BACKSPACE
  \t          TAB
  \n          LINE FEED
  \f          FORM FEED
  \r          CARRIAGE RETURN
  \e          ESCAPE

Escape Sequenzen

Während Steuerzeichen in Strings evaluiert werden in denen das Adverb :b aktiviert ist (meist auch gleichlautend in Regex), werden folgende Escapesequenzen nur von regulären Ausdrücken verstanden. Der allen Zeichen vorrangehene Backslash (\) zeigt an das folgende Buchstaben nicht wörtlich genommen werden sondern eine Sonderbedeutung haben. Das wird im englisschen auch escapen (flüchten) genannt.

  \0[ . . . ]     Zeichen mit diesem oktalen ASCII-Wert (Klammern optional)
  \b              Wortgrenze (Zeichen das an Leerzeichen (\s) grenzt )
  \B              keine Wortgrenze
  \c[ . . . ]     ein benannntes oder Kontrollzeichen
  \C[ . . . ]     alles außer dem benannten Buchstaben oder Kontrollzeichen
  \d              eine Ziffer
  \D              Zeichen die keine Zifferns sind
  \e              ein "escape"-Zeichen (beginnt meist mit \)
  \E              alles außer \e.
  \f              "form feed" Steuerzeichen (FF)
  \F              alles außer "form feed"
  \n              Finde einen (logischen) Zeilenumbruch (LF).
  \N              Finde alles außer einem (logischen) Zeilenumbruch
  \h              Finde horizontale Leerzeichen
  \H              Finde alles außer \h.
  \L[ . . . ]     alles innerhalb der Klammern sind Kleinbuchstaben
  \Q[ . . . ]     alle Metazeichen in Klammern haben keine Metabedeutung
  \r              return-Zeichen (CR)
  \R              alles außer \r
  \s              beliebige Lerzeichen (\t | \h | \v) 
  \S              alles ausser Leerzeichen
  \t              ein tab (unsichbares Tabulatorzeichen)
  \T              alles außer \t
  \U[ . . . ]     alles innerhalb der Klammern sind Großbuchsten
  \v              vertikale Leerzeichen
  \V              alles außer \v
  \w              Wortzeichen (Unicode alphanumerisch + "_")
  \W              alles außer \w
  \x[ . . . ]     finde ein Zeichen, als Hexadezimalzahl gegeben (Klammern optional)
  \X[ . . . ]     finde alles außer dem in hex angegebenen  Zeichen (Klammern optional)

Teilregeln

Werden normalerweise zur wiederverwendung durch =grammar=s definiert. Aber Perl 6 geht schon mit einigen Nützlichen an den Start.
  <ws>            Whitespace - Leerzeichen aller Art

Ablaufkontrolle

Wird ausführlicher auf Tafel 6 behandelt.

Sonderblöcke

Sonderblöcke oder auch closure traits werden intern als Codereferenzen gespeichert, die Kompilierungszeiteigenschaften (traits) des umgebenden Blockes sind. Sie können in jedem Block vorkommen, es sei ihre Funktion kann nur unter bestimmten Bedingungen erfüllt werden, was hier dann auch explizit geschrieben steht. Die mit * Gekennzeichneten können auch in Ausdrücken verwendet werden.
    BEGIN {...}*      zur compilezeit, so füh wie möglich, nur 1x ausgeführt 
    CHECK {...}*      zur compilezeit, so spät wie möglich, nur 1x ausgeführt 
     INIT {...}*      zur Laufzeit, so füh wie möglich, nur 1x ausgeführt 
      END {...}       zur Laufzeit, so spät wie möglich, nur 1x ausgeführt 

    START {...}*      bei ersten Ausführung, einmal je Klone

    ENTER {...}*      vor jeder Ausführung, mehrmals bei Schleifen
    LEAVE {...}       während jeden Verlassen des Blocks
     KEEP {...}       bei jedem erfolgreichem Blockaustritt, teil der LEAVE queue
     UNDO {...}       bei jedem nicht erfolgreichem Blockaustritt, teil der LEAVE queue

    FIRST {...}*      bei Initialisierung einer Schleife, vor ENTER
     NEXT {...}       beim Sprung in die nächste Iteration einer Schleife, vor jedem LEAVE
     LAST {...}       beim Verlassen einer Schleife, nach jedem LEAVE

      PRE {...}       definiert Vorbedingungen für einen Block vor ENTER
     POST {...}       definiert Nachbedingungen für einen Block nach LEAVE

    CATCH {...}       fängt jede Ausnahme vor LEAVE ab
  CONTROL {...}       fängt Ausnahmen von Steuerungsbefehlen (wie next/last/return etc.) vor LEAVE ab

Sprungbefehle

detailierte Erklärung

  goto       springe zu einem definierten Label ( "Labelname:\n")
  redo       wiederhohle diese Iteration der Schleife
  next       springe zur nächsten Iteration dieser Schleife
  last       verlasse diese Schleifenblock
  break      verlasse diesen "when"-Bedingungsblock
  leave      verlasse diese Block mit einem Rückgabewert
  return     verlasse diese Routine mit einem Rückgabewert

Bedingte Ausführung

detailierte Erklärung

  if         wenn nachfolgende Bedingung wahr/positiv ist, wird darauf folgende Block ausgeführt
  elsif      wie "if"; Wird nur beachtet, wenn keiner der vorangegangenen "if"- oder "elsif"-Ausdrücke positiv wahr
  else       führt nachfolgenden Block aus, wenn keine vorrangegangene "if" oder "elsif" Klausel ausgeführt wurde
  unless     Gegenteil von if, kein elsif oder else darf folgen
  given      setzt $_ und leitet Block mit "when"-Bedingungen ein
  when       führt smartmatch gegen $_ aus, wenn Ergebnis wahr/positiv, wird darauf folgende Bedingung ausgeführt
  default    führt nachfolgenden Block aus, wenn keine vorrangegangene "when" Klausel ausgeführt wurde

Schleifen

detailierte Erklärung zu Schleifen

  loop       Endlosschleife, kann auch als C-artige benutzt werden wie in Perl 5: "for ($a=1; $a++; $a>5) {... "
  repeat     leitet while- oder until-Schleifen ein, deren Bedingung am Blockende ist
  while      wiederholt solange der Ausdruck wahr ist
  until      wiederholt bis der Ausdruck wahr ist
  for        iteriert über einen Array wie in Perl 5: "for (@a) { ...", setzt $_ und kann daher auch mit "when" kombiniert werden

Routinen

Routinendefinitionen: [Namensraum] [Modus] Typ [Name] [Eigenschaft] (Signatur) { Block }

Routinetypen

  sub            einfache Routine
  method         vererbbare Objektmethode
  submethod      nicht vererbbare Methode
  regex          Routine die einen regulären Ausdruck ausführt
  rule           Alias auf "regex :ratchet :sigspace"
  token          Alias auf "regex :ratchet"
  macro          zur Kompilierungszeit ausgeführt, liefert AST

Routinenmodi

  multi          Routinen die gleichnamige Geschwister haben können, bei Aufruf wird Kandidat mit passender Signatur ausgewählt
  only           Routinen die keine gleichnamigen Geschwister in diesem Block haben dürfen (ist Standard, muss nicht angegeben werden)
  proto          Prototyp, nur für multis, wenn keine Signatur passt, wir gleichnamige proto aufgerufen

Routineneigenschaften

  signature      definiert Signatur einer Routine (Aufzählung aller Parameter - meist implizit durch runde Klammern)
  will do        definiert Block einer Routine (meist implizit durch geschweifte Klammern)
  as             innerer Rückgabetyp
  of             offizieller Rückgabetyp
  rw             Routine als lvalue benutzbar, man kann ihr zuweisen
  cached         markiert eine routine deren Ergebnisse gespeichert (gepuffert - memoized) werden
  parsed         hygienisches macro, nur bisher definierte darin bekannt
  reparsed       nicht hygienisches macro, später definierte sind bekannt
  tighter        definiert Operator mit höherer Priorität als dem zum Vergleich angegebenen 
  looser         definiert Operator mit niedrigerer Priorität als dem zum Vergleich angegebenen 
  equiv          definiert Operator gleichen Priorität als dem zum Vergleich angegebenen 
  assoc          definiert Assoziativität eines Operators
Zum Vergleich: Variablentypen, Vorrangtabelle und Assotiativitäten

Parametereigenschaften

  readonly       unveränderliche Parameter (Konstanten)
  rw             veränderliche Parameter (rw steht für: read write - lesen schreiben)
  copy           erzeugt schreibbare Kopie der Originalarguments ("pass-by-value")
  dynamic        Parameter ist im gesamten lexicalischen Bereich sichtbar (wie local in Perl 5)
  parcel         roher Zeiger, der nicht aufgelöst (contextualisiert) wird


Übersicht || 0:Vor | 1:Ge | 2:Theo | 3:Var | 4:Op | 5:IO | 6:{} | 7:Sub | 8:OOP | 9:Rx || A:Index | B: Tab | C:Tour | D:Delta | E:Links

-- HerbertBreunung - 16 Apr 2006
Topic revision: r102 - 2010-05-08 - 00:47:24 - HerbertBreunung
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.