Hier also nun alles mögliche um die Skriptsprache »Perl«.
Perl wurde 1986 von Larry Wall erfunden und eignet sich hervorragend, um alle Arten
von Text durch den »Fleischwolf« zu drehen. Texte (aber auch binäre Dateien) können
sehr leicht aus Dateien ausgelesen und auch wieder gespeichert werden.
Sind Texte einmal eingelesen, kann man die mit regulären Ausdrücken absuchen und
manipulieren.
Hier gehts zum Wikipedia-Eintrag zu Perl.
Hier einige Highlights dieser Sprache
- Interpretierte Skriptsprache (kein lästiges kompilieren)
- einfach zu erlernen, trotzdem sehr mächtig
- Strings, Arrays, Rekursion beliebiger Länge bzw. Tiefe (dynamisch!)
- Reguläre Ausdrücke zur Mustersuche und Ersetzung (also Sternchen, Fragezeichen u.v.m.)
- Integer-indizierte Arrays und String-indizierte Arrays (schnelle, dynamische Hashtables)
- TCP/IP Socket Programmierung (Also voll Internet-tauglich: FTP, CGI, Mail, ...)
- eingebauter Textmode-Debugger
- Plattformen: Unixe, OS/2, Windows 3.1/9x/ME/NT/2000/XP, DOS, Amiga usw.
- Perl ist KOSTENLOS.
Perl-Links & kostenlose Perl-Tools mit dem "WOK-Gütesiegel"TM
- Perl (ActivePerl)
für Windows von ActiveState
- CPAN - Comprehensive Perl Archive Network: Perl-Module für (fast) jeden Zweck
- vim Programmiereditor für "Profis" (opensource)
- JEdit Programmiereditor für "Anfänger" (opensource)
- Eclipse Entwicklungsumgebung, die mit dem E-P-I-C Plugin zur Perl-IDE wird
- E-P-I-C Eclipse-Plugin zur Perl-Entwicklung
WOKs Perl-Tips (nicht nur) für Expäddn
Alle Antworten ausklappen
oder alle Antworten einklappen
-
Unter welchem Betriebssystem läuft mein Script eigentlich? (Wichtig z.B. zur Konstruktion korrekter Dateinamen)
-
$^O == [linux|MsWin32|...] (Hinter dem ^ ist ein großer Buchstabe 'Oohh')
-
Wie kann ich verhindern, dass Ausgaben auf STDOUT nur gepuffert ausgegeben werden?
-
Entweder: $|=1;
oder: use FileHandle; STDOUT->autoflush(1);
-
Alles im grünen Bereich? Gab es einen Fehler? Wie kann ich den Errorlevel abfragen?
-
$! enthält den aktuellen Errorlevel
-
Wieviele Sekunden läuft mein Perl-Skript schon? Wie kann ich x Sekunden warten? Wie Bruchteile von Sekunden warten?
Und wie kann ich hochauflösende Zeitmessungen durchführen?
-
$^T enthält die Startzeit des Skriptes und so kann man mit:
(time - $^T) die Laufzeit in Sekunden ermitteln
sleep(int seconds) wartet eine Anzahl ganzer Sekunden
select(undef, undef, undef, 0.3333) wartet eine Drittel Sekunde
Mit dem Perl-Modul Time::Hires kann hochauflösende Zeitmessung gemacht werden.
-
Wie heißt das Skript, das gerade läuft?
-
$0 (hinter dem $ steht die Ziffer Null)
-
Wie kann ich Dateien umbenennen, kopieren oder löschen?
-
rename ($alt, $neu) benennt eine Datei um
use File::Copy; copy($alt, $neu) kopiert eine Datei
unlink($alt) löscht eine Datei
Anschließend den Errorlevel mit der Variable $! abfragen!
-
Wie kann ich rekursiv einen Verzeichnis-Baum nach Dateien mit einem bestimmten Namensmuster durchsuchen?
-
use File::Find;
find(\&myFileFilter, $myRoot); # ab Verzeichnis $myRoot suchen
sub myFileFilter
{
$_ enthält kompletten Pfad (Verzeichnis und Dateinamen)
$File::Find::dir enthält aktuelles Verzeichnis
$File::Find::name enthält aktuellen Dateinamen
}
-
Wie kann ich das aktuelle Verzeichnis abfragen, wechseln oder ein neues Directory anlegen?
-
Abfragen: use Cwd; $currentPath = cwd();
Wechseln: chdir ($newdir);
Anlegen: mkdir ($newdir, 0755);
Anschließend den Errorlevel mit der Variable $! abfragen!
-
Wie kann ich ein Datei- oder Directory-Handle nur lokal für eine Subroutine nutzbar machen?
-
Mit local($var) wird eine Variable innerhalb einer sub-Routine lokal bekannt gemacht.
Mit local(*DIR) oder local(*FILE) geschieht selbiges mit einem Verzeichnis/Datei-Handle.
-
Wie kann ich einen Hash sortieren - nach Werten (values) oder nach Schlüsseln (keys), nummerisch oder alphabetisch
-
Die Perl-Funktion sort sortiert normalerweise ein übergebenes Array mit dem String-Comparator cmp.
nach keys, nummerisch: foreach $key (sort {$a <=> $b} keys %hash) {print $key > $hash{$key}};
nach keys, alphabetisch: foreach $key (sort keys %hash) {print $key > $hash{$key}};
nach keys absteigend, nummerisch: foreach $key (sort {$b <=> $a} keys %hash) {print $key > $hash{$key}};
nach values, nummerisch: foreach $key (sort {$hash{$a} <=> $hash{$b}} keys %hash) {print $key > $hash{$key}};
nach values, alphabetisch: foreach $key (sort {$hash{$a} cmp $hash{$b}} keys %hash) {print $key > $hash{$key}};
-
Wie kann ich Zeichenketten mit deutschen Umlauten (Sonderzeichen ö,ä,ü,Ö,Ä,Ü,ß) mit der Perl-Funktion sort und den
Vergleichsoperatoren lt, gt, cmp korrekt sortieren? Auch lc() uc() sollen korrekt arbeiten?
-
use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL, "german");
-
Welchen Index hat der letzte Eintrag in einem Array @myArray?
-
$#MyArray (ist 0-basiert, also Anzahl Elemente = $#MyArray+1)
-
Was ist der Unterschied zwischen system() und exec()?
-
Beide führen externe Programme aus.
system("ls -la > files.txt"); # das Perl-Skript wartet, bis das externe Prog. fertig ist
exec("ls -la > files.txt"); # das Perl-Skript macht sofort nach dem Start weiter (wartet nicht).
-
Wie bekomme ich alle Fundstellen eines Musters in ein Array? Wie kann ich die Fundstellen zählen?
-
@allMatches = ($allText =~ /pattern/g);
$countMatches = ($allText =~ /pattern/g);
-
Wenn ein pattern-Match passt: Was steht davor / dahinter / im Match?
-
Nach erfolgreichem Pattern-Matching:
if ($text = /Mein Suchwort/)
{
$davor = $`;
$treffer = $&;
$dahinter = $';
}
Es gilt also: ($text eq $`.$&.$')
-
Wie arbeite ich mit Referenzen (ähnlich Pointern) z.B. auf ganze Hash-Tabellen?
-
Referenz erzeugen: $hashref = \%hash;
Ganzes Hash über Referenz ansprechen z.B.: @keys = keys (%$hashref);
Einen Hashwert über Referenz ansprechen z.B.: $myValue = $$hashref{$myKey};
-
Was genau macht eigentlich der Modulo-Operator (%) - Kann das Ergebnis von (x%y) auch negativ sein?
-
In Perl: "NEIN, ES KANN NICHT NEGATIV SEIN!"
Perl verhält sich hier anders als andere Programmier-Sprachen (siehe unten), man kann aber das
"übliche" Verhalten mit der Anweisung use integer; erzwingen.
Der %-Operator ermittelt den Rest einer ganzzahligen Division. Also (7 % 3 == 1). Soweit klar. Was
passiert aber, wenn einer der Operanden negativ wird? Ist dann das Ergebnis des %-Operators auch negativ?
Dafür gibt es zwei "Sichtweisen". Und diese stützen sich auf eine unterschiedliche Interpretation der
ganzzahligen Division DIV ab.
Laut Donald Knuth ("The Art of Computer Programming") gilt:
x DIV y = floor (x/y) mit floor(z) ist größte ganze Zahl <= z. Also z.B. floor (-4/3) = floor(-1.333) = -2
Laut Nicolaus Wirth ("Pascal Programmiersprache") gilt:
x DIV y = trunc (x/y) mit trunc(z) ist z ohne Nachkommastellen. Also z.B. trunc(-4/3) = trunc (-1.333) = -1
Sind x und y positiv, so liefern die beiden dasselbe Ergebnis!
Da aber nach beiden Schulen (Knuth und Wirth) der Rest der ganzzahligen Division definiert wird durch:
x MOD y = x - ((x DIV y) * y) gilt:
nach Knuth: -4 MOD 3 = -4 - (-2 * 3) = -4 - (-6) = -4 + 6 = +2
nach Wirth: -4 MOD 3 = -4 - (-1 * 3) = -4 - (-3) = -4 + 3 = -1
Vorteil Knuth: Solange y>0 ist auch immer (x MOD y) > 0. Das ist eine wichtige Eigenschaft
Vorteil With: Die ganzzahlige Division ist hier symmetrisch: (-x) div y = x div (-y) = -(x div y)
(nicht bei Knuth! Da gilt: (-x) div y = x div (-y) <> -(x div y)!).
Programmiersprachen mit Knuth-Modulo-Operator (-4%3==+2): z.B. perl
Programmiersprachen mit Wirth-Modulo-Operator (-4%3==-1): z.B. Pascal, Java, C#, C, C++
[Zurück]