|
|
28.2.2007
Was man mit RegEx tun sollte und was nicht Reguläre Ausdrücke sind eine große, mächtige Fähigkeit in Perl, alle möglichen Dinge mit Zeichenketten anzustellen. Suchen, ersetzen und löschen von Teilen eines Skalars lassen sich damit ziemlich komplex und sehr variabel umsetzen. Diese Komplexität und Flexibilität hat aber einen Nachteil: Für manche Aufgabenstellungen sind RegEx eigentlich zu langsam, bzw. es gibt wesentlich schnellere Varianten ohne RegEx.
Suchen nach festen Inhalten eines Skalars
$t="test"; if ($t=~ /te/){ ... }
|
Weiterlesen...
28.2.2007
chr() in Perl - Zeichen anhand seines ASCII-Codes ermitteln und ausgeben Mit dem Befehl chr() kann man ein Zeichen anhand seines ASCII-Codes ausgeben. Allerdings sind zum großen Teil nur Zeichen > 32 darstellbar, da die darunter liegenden Zeichen meist als Steuerzeichen verwendet werden.
Syntax: $zeichen = ord ($asciicode);
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n<html><body><h1>ASCII-Zeichentabelle</h1>";
my ($i,$j,$zeichenwert); $zeichenwert=32; print "<table>";
for ($i=0;$i<12;$i++){ print "<tr>"; for ($j=0;$j<8;$j++){ print "<td width=\"12%\">Code $zeichenwert: "; print chr($zeichenwert)." "; print "</td>"; $zeichenwert++; } print "</tr>"; } print "</table></body></html>";
|
Weiterlesen...
27.2.2007
Bestimmte Dateien eines Ordners suchen - Suchen nach Dateiendungen - Beispiel aus der Praxis Oft steht man vor dem Problem, daß man aus einem bestimmten Ordner alle Dateien eines bestimmten Typs suchen muß. Natürlich ging auch mir das schon öfters so, also hab ich mir eine kleine Funktion gestrickt, die mir alle Dateien zurückgibt.
#!/usr/bin/perl
# zum Testen der Funktion
use strict;
print join("\n",&alle_dateien("./","txt")); exit;
sub alle_dateien{ # Parameter 1: Ordnername, relativ zum Script # Parameter 2: Endung ohne . # gibt alle Dateien als Array zurück (unsortiert) # $endung = leer : Alle Dateien zurückgeben
my $ordner=shift; my $endung=shift; die "Kein Ordner angegeben" if ($ordner eq '');
if ($endung ne ''){ $endung=~ s/^\.//; $endung='\.'.$endung; } local *in;
opendir (in,"$ordner") || die "Can not open directory $ordner: $!";
return grep {$_=~ /$endung$/ && !-d "$ordner/$_" } readdir(in); }
|
Weiterlesen...
27.2.2007
crypt() in Perl - Zeichenketten verschlüsseln Mit der Funktion crypt ist es in Perl möglich, Zeichenketten zu verschlüsseln.
Syntax: $verschluesselt=crypt($original,$salt);
$salt stellt einen Skalar dar, der mindestens aus 2 Zeichen bestehen sollte. Mit diesem Skalar wird die Originalzeichenkette verschlüsselt. Weiterlesen...
26.2.2007
Alternativen in regulären Ausdrücken - Oder-Suche mit RegEx Manchmal möchte man in regulären Ausdrücken eine Oder-Suche durchführen. Dies wird ermöglicht durch den |-Operator im Suchteil des regulären Ausdruckes.
Beispiel:
my $t="test"; if ($t=~ /haus|test|maus/){print "gefunden $&";} else {print "nicht gefunden";}
|
Weiterlesen...
23.2.2007
Arrays in Perl - Besonderheiten Was ein Array in Perl ist sollte ja hinlänglich bekannt sein.
Es gibt allerdins auch noch einige Besonderheiten, auf die man hier hinweisen könnte:
Anzahl der Elemente eines Arrays Will man wissen, wie viele Elemente in einem Array vorhanden sind, kann man dies ganz einfach mit: Weiterlesen...
21.2.2007
Dateien öffnen - Sicherheitsrisiko von Benutzereingaben Dateien öffnen als Sicherheitsrisiko... tja, kann man denken, was soll da schon großartig passieren.
Aber Vorsicht, ein unsauberes Programm wie das Folgende kann es unliebsamen Zeitgenossen ermöglichen, Zugriff auf Ihren Server zu erlangen.
... #Hier werden Parameter eingelesen, die Ihre Webseitenbesucher eingeben können, unter anderem auch den Parameter $datei open (in,"<daten/$datei.txt"); print <in>; close in;
|
Weiterlesen...
21.2.2007
chomp() in Perl Im Gegensatz zu chop() entfernt chomp() nur dann das letzte Zeichen eines Skalars (Strings) oder Arrays (Liste), wenn dieses Zeichen gleich dem Zeichen ist, das in $/ gesetzt ist.Hört sich jetzt etwas verquert an, also im Klartext: In $/ ist das Zeichen enthalten, das als INPUT_RECORD_SEPARATOR bekannt ist. Normalerweise ist das das \n bzw. der Zeilenumbruch. Und jetzt kommt man der Sache schon näher: Es wird, wenn vorhanden, jeder Zeilenumbruch am Ende eines Skalars oder eines Arrayelements gelöscht.
Beispiel:
Weiterlesen...
21.2.2007
chop() in Perl - Letztes Zeichen eines Skalars oder Arrays entfernen Der Befehl chop() entfernt das letzte Zeichen eines Skalars oder eines Arrays. Beispiel:
$t="Hansi"; $weg=chop($t); print "Neu: $t\nAbgeschnitten: $weg";
|
Ausgabe: Neu: Hans Weiterlesen...
19.2.2007
Dateien öffnen mit Fehlerabfrage Also, wie man Dateien mit Perl öffnet ist ja hoffentlich klar geworden, wenn nicht, kann man es hier nachlesen.Allerdings hatte die Geschichte einen kleinen Schönheitsfehler: Wenn es die Datei nicht gibt, wird in keinster Weise mit einer Fehlermeldung reagiert. Manchmal ist es ja auch nicht so wichtig, daß eine Fehlermeldung erscheint, manchmal jedoch ist es "lebenswichtig" für die Funktion des Programmes. Perl unterbricht nicht, wie andere Programmiersprachen, von sich aus die Ausführung des Scriptes, wenn eine Datei sich nicht öffnen läßt!
Weiterlesen...
19.2.2007
Feiertage eines beliebigen Jahres errechnen mit Perl Hier mal etwas aus der Praxis:
Jeder kommt ja mal an den Punkt, an dem er einen Kalender verarbeiten muß. Natürlich wäre es wünschenswert, wenn nicht nur die Tage den Wochentagen zugewiesen werden, sondern wenn auch bekannt wäre, ob ein Tag ein Feiertag ist. Ich habe da schon vor Jahren einmal ein Script geschrieben, das diese Arbeit erledigt. Aus aktuellem Anlaß hab ich es mal aktualisiert und umgeschrieben.
Hintergrund Interessanterweise richten sich alle religiösen Feiertage nach Ostersonntag, so ist Pfingsten immer 49 Tage nach Ostersonntag, Rosenmontag ist immer 48 Tage vor Ostersonntag. Weiterlesen...
19.2.2007
split() - Zeichenketten zerlegen in Perl Der Befehl split() ist eine mächige Funktion, mit der man Skalare in Arrays zerlegen kann.
Syntax: @array=split(/$trennungszeichen/,$skalar);
Weiterlesen...
19.2.2007
Nochmal Reverse - Diesmal für Zeichenketten Reverse für Arrays kennt man ja schon - die Reihenfolge der Elemente wird von hinten nach vorne getauscht. Reverse gibts aber auch für Skalare, oder Strings, wie manche Zeichenketten auch nennen.
Syntax: $neu=reverse($alt); Weiterlesen...
18.2.2007
Groß-Kleinschreibung in Regular Expression ändern Folgendes Beispiel ist für mich mehr eine "Spielerei", aber immerhin interessant genug, sie zu beschreiben.
Also, die Aufgabenstellung wäre angenommener Weise:
Wandle Weiterlesen...
17.2.2007
Datei einlesen in Perl Eine Textdatei kann man folgendermaßen komplett einlesen, also in einem Rutsch:
open (in,"<$dateiname"); @datei= <in>; close in;
|
Der Inhalt der Datei wird im Array @datei eingelesen und steht dort zur Verfügung. Jede Textzeile, getrennt durch einen Zeilenumbruch (Enter, Eingabe, \n, oder wie man es nennen mag) ist ein Element.
Weiterlesen...
16.2.2007
Gruppenbildung - Zeichenkolonnen mehrfach suchen mit Perl Wie Sie hier gesehen haben, wirkte eine entsprechende Anweisung zur Mehrfachsuche immer nur auf das zu letzt stehende Zeichen, etwa $t=~ /a{2,3}/; sucht zwei oder dreimal das a. Was aber nun, wenn längere Zeichenketten wiederholt gesucht werden sollen?
Dafür gibt die Klammer ( und ); Weiterlesen...
16.2.2007
Reguläre Ausdrücke - Klammerung und gespeicherte Werte
Wie Sie vorher gesehen haben, können Wiederholungen von Zeichen ermittelt werden, indem man die Zeichen in Klammern setzt.Diese Klammerung hat aber auch noch einen anderen Effekt: Die gefundenen Zeichen werden bestimmten Variablen zugewiesen! Diese Zuweisung ist eine sehr hilfreiche Einrichtung von Perl, wie Sie gleich sehen werden:
$t='<a href="test.htm">Test</a>'; $t=~ /(<a.*?>)(.*?)(<\/a>)/; print "Linkcode: $1\nLinktext: $2\nEndocde: $3";
|
Weiterlesen...
16.2.2007
Kuriose Reguläre Ausdrücke Hier will ich in loser Reihenfolge die seltsamsten von gefundenen Regulären Ausdrücke vorstellen.
Split mit RegEx
$t="wert1 wert2"; ($a,$b)=$t=~ /(.*) (.*)/; print "a: $a, b: $b";
|
Weiterlesen...
15.2.2007
Gegen die Gier - Kürzeste Möglichkeit finden mit regulären Ausdrücken Perl ist ja, wie Sie bekanntermaßen jetzt wissen, gierig. Es werden also immer die längsten möglichen Ergebnisse verwendet. Dies hat ja oftmals Vorteile, was aber, wenn man die kürzeste Variante braucht? Natürlich geht das auch, wäre auch blöd wenn nicht...
Um die kürzeste Variante einer Entsprechung eines regulären Ausdruckes zu finden, wird das ?-Zeichen verwendet. Am Besten, ich bringe gleich ein Beispiel:
$t='<a href="test.htm">bla</a>'; $t=~ /<.*?>/; print "$&\n";
|
Weiterlesen...
15.2.2007
Wiederholungen finden mit regulären Ausdrücken Eine besondere Flexibilität erhalten Reguläre Ausdrücke durch die Möglichkeit, nach mehrfachem Auftreten von Zeichen zu suchen. Erreicht wird dies durch die Angabe der Anzahl in geschweiften Klammern { und }. Die Angabe {2,5} bedeutet, daß das Zeichen 2-5 mal enthalten sein muß.
Beispiel Weiterlesen...
15.2.2007
substr() in Perl Der Befehl substr, der eine Abkürzung des englischen Wortes Substring ist, liefert Teile eine Strings, oder Skalars, wie es in Perl heißt, zurück. Der Syntax ist $teil=substr($original,startpos,anzahlzeichen,ersetzungszeichen);
Weiterlesen...
9.2.2007
Global, lokal oder wie - my () in Perl Ohne lange Vorrede gleich ein Beispiel:
for ($i=0;$i<10;$i++){ print "$i "; &changei; }
sub changei{ $i=20; }
|
Ausgabe: 0 Weiterlesen...
9.2.2007
print in Perl Hier ist er also, der gute alte print-Befehl, den man aus vielen anderen Programmiersprachen kennt. Und natürlich ist er auch in Perl dafür zuständig, etwas auszugeben.
Was und wohin etwas ausgeegeben wird, ist aber abhängig davon, wie print verwendet wird.
Weiterlesen...
6.2.2007
Den absoluten Pfad eines Scriptes auf dem Server feststellen Zwischendurch mal wieder etwas fortgeschritteneres, ein Problem das sich mir heute stellte: Wie stelle ich den absoluten Pfad eines Scriptes auf dem Server fest?
Nachdem ich mal bei Gurgel nachgesehen habe und nichts brauchbares gefunden habe, hab ich mir mal all die Perl-Befehle durchgeduckt, die damit zu tun haben könnten. Aber auch da war nichts zu finden. Fündig wurde ich schließlich bei den Umgebungsvariablen. Weiterlesen...
6.2.2007
Reguläre Ausdrücke - Einfache Suche mit gemischten Zeichen Wie die einfache Suche funktioniert haben wir ja nun gesehen. Auch die Funktion von Zeichenklassen sollte klar sein.
Hier noch ein Beispiel für die einfache Suche mit Zeichen und Zeichenklassen zusammen:
$t="Perl-Version 5.002"; if ($t=~ /\d\.\d/){print "wahr";}
|
Weiterlesen...
5.2.2007
Keys eines Hashes feststellen in Perl Wie kann man am schnellsten alles Key's (Schlüssel) eines Hashes feststellen?
Ganz einfach, dafür gibts den keys()-Befehl.
Beispiel Weiterlesen...
2.2.2007
Doppelte Einträge aus Array entfernen mit Perl Ich hab mir da mal eine Funktion geschrieben, die aus einem Array schnell alle doppelten Werte herausfiltert. Schnell bedeutet übrigens: Ich habe verschiedene Möglichkeiten auf Ihre Schnelligkeit hin getestet und diese war die Schnellste...
Code:
sub del_double{ #Parameter: @liste, die aussortiert werden soll my %all; grep {$all{$_}=0} @_; return (keys %all); }
|
Weiterlesen...
2.2.2007
Reguläre Ausdrücke - Suche nach Zeichen am Wortanfang und am Wortende Nochmal zurück zur einfachen Suche.
Wie kann ich nach Zeichen Suchen, die am Wortanfang oder am Wortende stehen? Natürlich bieten reguläre Ausdrücke auch dafür eine Lösung. Die zeichen ^ und $ werden dafür genutzt.
Beispiel: Weiterlesen...
2.2.2007
Reguläre Ausdrücke - Einfaches Suchen die 2. Die Grundlagen des Suchens wurde bereits hier vorgestellt.Es wurde vorgestellt, wie man Zeichenketten in Zeichenketten finden kann. Jedoch war das ganze noch ziemlich "unhandlich" und sehr umständlich. Was zum Beispiel, wenn man zum Beispiel die Groß-Kleinschreibung ignorieren möchte, oder ganze Bereiche von bestimmten Zeichen suchen oder ausschließen möchte?
Also, weiter gehts mit dem "einfachen" Suchen
Weiterlesen...
2.2.2007
Reguläre Ausdrücke Reguläre Ausdrücke sind das wahrscheinlich mächtigste Werkzeug in Perl. Mit diesen regulären Ausdrücken kann man Skalare relativ einfach nach bestimmten Zeichen oder Zeichenketten durchsuchen, man kann aber auch relativ einfach einzelne Zeichen oder Zeichenketten austauschen, löschen oder einfügen. Wie sie vielleicht merken, sage ich immer relativ einfach. In Wahrheit braucht es einiges an Zeit und Übung, bis man sich an den Syntax gewöhnt hat.
Aber fangen wir einfach mal von vorne an:
Weiterlesen...
1.2.2007
RegEx Spickzettel - Abkürzungen in regulären Ausdrücken
^ Von Beginn der Zeile , also ^abc findet abc, abcdefg, abc234, BESONDERHEIT: in []-Klammer bedeutet das Zeichen eine Negation! $ Ende der Zeile, also abc$ findet abc, endeabc, 1234abc . Jedes Zeichen | Oder, also findet hans|franz hans oder franz Weiterlesen...
|
|
|
|
| Gelesene Beiträge insgesamt: 4428207 |
|
|