Hier stelle ich ein paar meiner kleineren Perl-Scripts vor. Vielleicht sind sie ja jemandem von Nutzen.

Alle hier aufgelisteten Programme werden unter der Perl Artistic License und/oder der GPL zur Verfügung gestellt.

Asterisk Least Cost Router

Asterisk ist eine Telefonanlagen-Software für Unix-Systeme.

Ich habe Asterisk bei mir genutzt, um über eine günstige ISDN-Karte mit HFC-Chip eine ISDN-Telefonanlage zu simulieren, an die ich dann über einen AB-Wandler eine Analogtelefon angeschlossen hatte, mit dem ich dann völlig transparent über VoIP telefonieren konnte.

In Zeiten der Telefonflatrates ist das allerdings immer weniger interessant geworden – dennoch eine interessante Sache.

Um ausgehende Gespräche stets über den günstigsten Provider durchzuführen, habe ich ein kleines LCR Script geschrieben, das sich über das AGI im Asterisk einbindet.

Man kann die einzelnen Routen sehr flexibel und einfach in einer Konfigurationsdatei definieren. Das Script wird dann, wenn Asterisk entsprechend konfiguriert ist, bei jedem ausgehenden Anruf gestartet und wählt den günstigsten Provider.

Eine kurze (englische) Dokumentation ist im Paket enthalten. Eine etwas ausführlichere (deutsche) Dokumentation habe ich in einem Forum hinterlassen.

Lustig zu sehen, dass Anfang 2006 noch jemand anders auf die gleiche Idee gekommen ist: Asterisk::LCR im CPAN

Download als .tar.gzDirektdownload

Filenumberer

Das ist ein relativ einfaches Script: Man lässt es auf ein paar Dateien und Ordner los und es stellt (optional rekursiv) den enthaltenen Dateien eine aufsteigende Zahl vor den eigentlichen Dateinamen.

Das Skript brauche ich, um meinem MP3-Player beizubringen, die Dateien in der richtigen Reihenfolge abzuspielen. Der Player scheint beim Sortieren der Dateien wohl nur die ersten X Zeichen zu berücksichtigen, was bei Benennungen der Art "Interpret – Album – Tracknummer – Titel" leider fehlschlägt.

Das Skript emuliert sogar die unter Windows nicht vorhandene Wildcard-Expansion (*).

Benutzung:

./file_numberer.pl [-r] ordner

oder

./file_numberer.pl [-r] *

Download als .plDirektdownload

Netspeed – Ermittlung der Netzwerkbandbreite zwischen zwei Rechnern

Es handelt sich um zwei Scripts:

Benutzung:

./netspeed_server.pl [port]

bzw.

./netspeed.pl host[:port]

Der Standard-Port ist 19.

Client als .plDirektdownload

Server als .plDirektdownload

POD2HTML

Ein Wrapper-Script um Pod::Simple::HTMLBatch, das eine einfache Konvertierung der POD-Dokumentation von Perl-Dateien unter Angabe einiger Optionen durchzuführen.

 Usage: ./pod2html.pl [options]
 -help   - This help screen.
 -source - The source directory of the perl modules that should be converted.
           Defaults to .
 -target - The target directory where the HTML files will be stored.
           Defaults to ../doc
 -css    - The CSS file which should be used.
           Defaults to cpan.css
 -index  - Create an index.html or not.
           Defaults to 0

Ich benutze es in meinen "größeren" Projekten zur automatischen Generierung der Dokumentation.

Download als .tar.gzDirektdownload

RSSCache

Dieses Programm stellt eine Art RSS-Proxy zur Verfügung. Man kann über diesen Cache auf RSS-, RDF- und Atom-Feeds zugreifen:

http://cache.server:port/http://some/feed.xml

Der RSS-Cache-Server lädt den Feed herunter und speichert ihn zwischen und liefert ihn an den Client aus. Soweit nichts besonderes

Der Vorteil ist, dass der RSS-Cache die Feed-Items für einen definierten Zeitraum (z.B. eine Woche) zwischenspeichert, anstatt nur die letzten 20 Items oder so zurückzugeben. Das ist sehr nützlich, wenn man Feeds abonniert hat, die einen hohen Traffic (>20 Items pro Tag) haben und die Feeds nicht run um die Uhr abholen kann. Man verpasst so keine Feed-Items, wenn man den Feed nicht regelmäßig selbst abholen kann.

Einen zusätzlichen Vorteil macht die Client-Identifikation aus. Man kann sich eine Client-ID vom RSS-Cache über folgende URL holen:

http://cache.server:port/generate_cid

Der RSS-Cache gibt dann eine Client-ID zurück (z.B. 'k4JOgtlf'). Wenn man nun diese ID in den Feed-Requests benutzt…

http://cache.server:port/cid_k4JOgtlf/http://some/feed.xml

…weiß der RSS-Cache, welcher Client den Feed anfragt und gibt nur die Feed-Items zurück, die dieser Client noch nicht heruntergeladen hat. Das spart eine Menge Bandbreite für den Client, den RSS-Cache und den Feed-Server. Toll, oder? :)

Bemerkung: Dieses Programm macht massiven Gebrauch von Perl ithreads, was leider negative Auswirkungen auf den Speicherverbrauch und die Leistung hat. Außerdem scheint irgendwo ein Memory-Leak zu existieren, sodass man das Programm alle 1-2 Wochen neu starten muss. Es wird ein Perl 5.6 oder neuer mit Thread-Unterstützung vorausgesetzt.

Download als .tar.gzDirektdownload

S25@once ↔ Phonebackup Converter

Dieses kleine Tool habe ich geschrieben, um meine Handy-Kontakte von meinem Siemens ME-45 auf mein Sony Ericsson T610 zu übertragen (mittlerweile habe ich jedoch ein K750i).

Dabei habe ich die Daten vom ME-45 mit S25@Once exportiert, mit meinem Script in das Format von PhoneBackup (leider scheint die Website des Autors down zu sein) konvertiert und damit auf das T610 kopiert.

Das Tool kann dabei sowohl von S25 (.csv) ⇒ PB (.ms), also auch von PB ⇒ S25 konvertieren.

Benutzung:

contact_converter_s25atonce_phonebackup.pl [OPTIONS]
--help         This screen
--s2p          Read from s25@once file and write to phonebackup file
--p2s          Read from phonebackup file and write to s25@once file
--s25=FILE.csv The s25@once FILE
--pb=FILE.ms   The cristersson.org phonebackup FILE
--s25lf        Contact names in the s25@once file are stored in
               "Lastname, Firstname" order instead of "Firstname Lastname" 

Download als .plDirektdownload

SMTP-Mailer

Dieses Script nutzt Mail::Sender, um über einen SMTP-Server Mails zu verschicken.

Das praktische an dem Script ist, dass das zugrundeliegende Modul viele Authentifizierungsmechanismen (CRAM-MD5, NTLM, LOGIN, PLAIN) unterstützt, die das Script nacheinander ausprobiert (sofern der Server sie unterstützt), falls keine Methode explizit angegeben wird. Das erleichtert den Mailversand, wenn man nicht genau weiß (oder angeben will), welche Mechanismen der Server unterstützt.

Man muss also nur eine einfache Subroutine aufrufen:

mail_smtp($subject, $text, $to, $cc, $bcc, $from, $FROM)

Und der Rest wird automatisch erledigt. Dieser Code wird auch in meinem Web-Framework verwendet, kann aber auch auf der Konsole nützlich sein.

Download als .plDirektdownload