Shell-Aliase effektiv nutzen
Veröffentlicht von Thomas Fahle am (Permalink)
Wenn Sie Ihre Perl-Programme unter Linux entwickeln und häufig die Kommandozeile nutzen, lohnt es sich ein paar Minuten in die Automatisierung vieler Aufgaben zu investieren.
Hier bietet sich die Nutzung von Shell-Aliasen an, die permanent in einer Datei (z.B. ~/.perlaliases) gespeichert und bei jedem Login automatisch zur Verfügung gestellt werden.
Zahlenbasis konvertieren (Base Conversion)
Die folgenden Aliase sind bei der Umrechnung von einem Zahlensystem in ein anderes recht nützlich.
alias d2h="perl -e 'printf qq|%X\n|, int( shift )'" alias d2o="perl -e 'printf qq|%o\n|, int( shift )'" alias d2b="perl -e 'printf qq|%b\n|, int( shift )'" alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'" alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'" alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'" alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'" alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'" alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"
Quelle: Journal of brian_d_foy : Base conversions
Modulversionen ermitteln
Um die Version eines installierten Moduls muss man jedes Mal etwas wie
perl -MName::des::Moduls -le "print Name::des::Moduls->VERSION"
eingeben. Das lässt sich recht einfach verkürzen.
function pmver ( ) { # Gibt die Version des (installierten) Perlmoduls aus # Usage pmver Perlmodul # Beispiel pmver CGI perl -M$1 -le "print $1->VERSION" }
Beispiel
$ pmver CGI 3.15
Quelle: Hack #4 in Perl Hacks (ISBN: 3897214741)
Perl Debugger
Den Perl Debugger verwende ich häufig (perl -d programm.pl args ) auch als Perl-Shell (perl -d -e 0). Die Funktion debug erspart mir Tipparbeit.
function debug () { if [ -z $1 ] then perl -d -e 0 else perl -d $@ fi }
Wenn debug ohne Parameter aufgerufen wird, wird eine Perl-Shell geöffnet; beim Aufruf mit Parametern werden die Parameter einfach an den Debugger weitergereicht.
$ debug Loading DB routines from perl5db.pl version 1.28 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 0 DB<1>
$ debug HalloWelt.pl Loading DB routines from perl5db.pl version 1.28 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(HalloWelt.pl:4): print "Hallo Welt\n";
Verschiedene Perlversionen
Häufig habe ich mehrere Perlversionen auf meinem Rechner. Für jede Perlversion, die nicht im Standardpfad ($PATH) aufgeführt ist, lege ich einen eigenen Alias an.
alias perl510="/opt/perl510/bin/perl"
Beispiel
$ perl -v This is perl, v5.8.8 built for i486-linux-gnu-thread-multi ... $ perl510 -v This is perl, v5.10.0 built for i686-linux ...
Unterschiedliche Modulversionen
Manchmal muss ich meinen Code mit unterschiedlichen Modulversionen testen, z.B. nach Updates eines CPAN-Moduls. Das neue Modul wird dazu händisch in einen eigenen Ordner (z.B. /opt/devel/) installiert. Hier hilft der Schalter -I, der den @INC anpasst.
alias newmods="perl -I /opt/devel/"
Beispiel (inc.pl)
#!/usr/bin/perl use warnings; use strict; print join("\n", @INC);
Wenn das Programm wie gewohnt aufgerufen wird, ergibt sich folgende Ausgabe.
$ perl inc.pl /etc/perl /usr/local/lib/perl/5.8.8 ....
Bei der Verwendung von newmods werden die neueren Module aus /opt/devel zuerst geladen.
$ newmods inc.pl /opt/devel/ /etc/perl /usr/local/lib/perl/5.8.8 ....
Alle aufgeführten Aliase in der Übersicht
Hier noch einmal alle angesprochenen Aliase und Funktionen in einer Übersicht.
alias d2h="perl -e 'printf qq|%X\n|, int( shift )'" alias d2o="perl -e 'printf qq|%o\n|, int( shift )'" alias d2b="perl -e 'printf qq|%b\n|, int( shift )'" alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'" alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'" alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'" alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'" alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'" alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'" alias perl510="/opt/perl510/bin/perl" alias newmods="perl -I /opt/devel/" function pmver ( ) { # Gibt die Version des (installierten) Perlmoduls aus # Usage pmver Perlmodul # Beispiel pmver CGI perl -M$1 -le "print $1->VERSION" } function debug () { echo "Parameter $1" if [ -z $1 ] then perl -d -e 0 else perl -d $@ fi }
Vorschläge bitte
Weitere produktive Shell-Aliase bitte in die Kommentare. Danke.