Jede Ausgabe besteht aus einer Liste von Wörtern

Diese Zeilen müssen sortiert werden über eine alphabetische Ordnung, dass die Sub-Zeichenkette beginnend bei der Schlüsselwort verwendet. Das Schlüsselwort beginnt nach der Kolonne 50, so dass wir eine besondere Art Helfer-Routine, sucht sich diese Sub-Strings. Die Art Routine ist vergleichbar mit dem früheren numeric_sort erfordern dargestellt. Es stützt sich auf die Konvention, dass, bevor die Routine aufgerufen wird, die globalen Variablen $ a und $ b wird zugewiesen wurden die beiden Datenelemente (in diesem Fall Bericht Linien), die verglichen werden muß.

by_keystr sub (my $ str1 = substr ($ a, 50); my $ str2 = substr ($ b, 50); if ($ str1 lt $ str2) (return -1;) elsif ($ str1 eq $ str2) ( return 0;) else (return 1;))
  

Diese Subroutine setzt lokale Variablen zu den beiden Sub-Strings zu speichern. Perl erlaubt die Deklaration von Variablen, deren Anwendungsbereich auf den Körper eine Funktion beschränkt (oder zu einem inneren Block, in dem sie deklariert wurden Gültigkeitsbereich). Diese Variablen werden mit dem Schlüsselwort meine, hier die Art Hilfsfunktion hat zwei lokale Variablen $ $ str1 und str2 erklärt. Diese enthalten die Unter-Zeichenketten, die an Position 50 von den beiden Linien erzeugt. Die lt und eq Vergleiche, die auf diese Saiten machen können vereinfacht mit cmp Perl-Betreiber (es ist ein String-Version des Betreibers im Rahmen der numerischen Art Hilfsfunktion erwähnt). Der Körper der wichtigsten Werke while-Schleife durch die Aufspaltung der Eingabezeile in eine Liste von Wörtern und Verarbeitung dieser Liste.

while ($ title = ) (Chomp ($ title); @ Titel = split / /, $ title; ... foreach $ i (0 .. $ Titel #) ($ word = $ title [$ i]; ... ))

Jedes Wort muss getestet werden, um festzustellen, ob es ein Schlüsselwort ist. Dies kann mit einem einfachen regulären Ausdruck übereinstimmen. Das Muster in diesem regulären Ausdruck gibt, dass es ein Großbuchstaben am Anfang des Strings in $ statt Word: if ($ Word muss = ~ / ^ [AZ] /) (... Die) = ~-Operator ist in Perl reguläre Ausdrücke Betreibers; dieser wird verwendet, um den Vergleich der Wert von $ Word und rufen Sie die / ^ [AZ] / Muster. Wenn das aktuelle Wort ist wie ein Schlüsselwort zugeordnet sind, dann die Worte, bevor er werden kombiniert, um den Beginn String-Form, und das Stichwort und die verbleibenden Wörter werden kombiniert, um ein Ende String-Form. Diese Strings können dann kombiniert werden, um eine Linie für die endgültige Ausgabe zu produzieren. Dies geschieht mit der Funktion sprintf (die gleiche wie in stdio C's Bibliothek). Die Funktion sprintf erzeugt einen String im Speicher, wieder dieser String als Ergebnis. Wie printf, sprintf nimmt einen Format-String und eine Liste von Argumenten. Die Ausgabe Linien dargestellt hergestellt werden kann mit der Anweisung:

$ line = sprintf "% 50s%-50s \ n", $ start, $ end;

Das vollständige Programm ist:

#! / usr / bin / perl sub by_keystr (my $ str1 = substr ($ a, 50); my $ str2 = substr ($ b, 50); if ($ str1 lt $ str2) (return -1;) elsif ($ str1 eq $ str2) (return 0;) else (return 1;)
@) Collection = (); while ($ title = ) (Chomp ($ title); @ Titel = split / /, $ titel, $ start = ""; foreach $ i (0 .. $ Titel #) ($ word = $ title [$ i]; if ($ Word = ~ / ^ [AZ] /) ($ end = ""; for ($ j = $ i; $ j 

In Perl gibt es immer einen anderen Weg! Eine weitere Möglichkeit für den Bau der $ end Liste verwenden würden, Perl-Funktion Join:

$ end = join '' $ Titel [$ i .. $ # Titel];

Perl-Join-Funktion (in perlfunc dokumentiert) hat zwei Argumente - ein Ausdruck und eine Liste. Es wird eine Zeichenfolge durch den Beitritt der einzelnen Saiten der Liste, und der Wert des Ausdrucks ist als Trennzeichen Element eingesetzt. Perl wird mit den Bibliotheken von mehreren tausend Unterprogramme, oft den Großteil Ihrer Arbeit kann über die bestehenden Routinen. Allerdings müssen Sie Ihre eigenen Unterprogramm definieren - wenn einfach in Ordnung zu bringen Sie Ihren Code und zur Vermeidung von übermäßig großem Hauptfach-line-Programme. Perl-Routinen sind wie folgt definiert:

sub name Block

Eine Routine hat einen Rückgabewert, das ist entweder der Wert der letzten Anweisung oder einen Wert in eine explizite return-Anweisung angegeben. Argumente für eine Routine werden zu einer einzigen Liste zusammengefasst - @ _. Einzelne Argumente können durch die Indizierung in dieser Liste isoliert werden, oder indem Sie eine Liste Literal als ein L-Wert. Wie bei der Art Hilfsfunktion im letzten Teil dargestellt, kann Unterprogramme ihre eigenen lokalen Geltungsbereich variables.Many weitere Informationen von Subroutinen definieren, sind in der perlsub Teil der Dokumentation gegeben. Klammern sind optional in Unterroutine ruft:

Process_data ($ arg1, $ arg2, $ arg3); ist die gleiche wie process_data $ arg1, $ arg2, $ arg3;

Eine Definition für eine solche Routine ist:

Oktal-sub (my $ str = $ _ [0]; my $ code = 0; for (my $ i = 1; $ i 

Dieses Unterprogramm geltend gemacht werden könnten:

$ str = "-rwxr-x ---"; $ Zugangscode oktal = $ str;

Für ein zweites Beispiel betrachten wir ein Unterprogramm, um festzustellen, ob eine bestimmte Zeichenkette in einer Liste vorhanden ist:

Mitglied (item, list);

Wie bereits erwähnt, die Argumente für eine Routine werden zu einer einzigen Liste zusammengefasst, sie müssen mit Ausnahme in der Routine aufgeteilt werden. Im Rahmen der Verarbeitung einer foreach-Schleife, die prüft, ob das nächste Mitglied der Liste die gewünschte Zeichenfolge entspricht:

Mitglied sub (my ($ entry, @ list) = @ _; # trennen Sie die Argumente foreach $ elem (@ list) (if ($ elem eq $ entry) (return 1;))
return 0;)

Tatsächlich gibt es einen anderen Weg. Es besteht keine Notwendigkeit, ein Mitglied Unterroutine erfinden, weil Perl bereits eine verallgemeinerte Version in ihrer Routine besitzt grep grep match_criterion datalist Wenn in einer Liste Kontext verwendet wird. Produziert grep ein Sub-Liste mit Verweisen auf die Mitglieder des datalist, dass der Test zu erfüllen. Wenn in einem skalaren Kontext verwendet, grep gibt die Zahl der Mitglieder des datalist dass Erfordernissen gerecht wird.

Ein Artikel eingereicht von Jorge Martinez


Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle.
Wichtig: Dieser Artikel "Jeder Ausgang besteht aus einer Liste von Wörtern" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.


Online: 285 users browsing the articles directory