Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2005  »  07  »  Tipps für Tippfaule  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Paketsuche

Wird eine »package«-Definition durchlaufen, speichert »ppitags« deren Namen als aktuelles Package. Dies Verfahren würde zwar durch Package-Definitionen in Blocks leicht ausgehebelt, aber das spielt praktisch in 99,9 Prozent aller Fälle keine Rolle.

Zeile 52 stöbert Funktionsdefinitionen der Form »sub func {« auf und extrahiert den Funktions- oder Methodennamen, damit der Tag-Mechanismus Konstrukte wie »LWP::Debug::trace« erkennt und später zu jener Stelle springt, an der die Funktion »trace« im Modul »LWP::Debug« definiert ist. Der »push«-Befehl in Zeile 61 schiebt einen neuen String ans Ende des Array »@found«, der aus dem gesuchten Tag (Package- oder voll qualifizierter Funktionsname), dem absoluten Source-Dateinamen und einem regulären Ausdruck besteht, der die Package- oder Funktionsdefinition in der zugehörigen Source-Datei findet.

Hierzu bildet die ab Zeile 69 definierte Funktion »regex_from_node« einen regulären Ausdruck, der aus allen Zeichen der Trefferzeile vom Zeilenanfang bis zum gesuchten Token besteht. Bei einer Subroutine liefert »$node->content()« also sowohl den Funktionskopf als auch den Rumpf. Deswegen schneidet Zeile 75 alle Zeilen außer der ersten ab und die Zeilen 77 und 78 gehen so lange im Token-Baum zurück, bis sie den Zeilenanfang erreichen.

Nach der »while«-Schleife steht in »$regex« der Inhalt der Source-Zeile, vom Zeilenanfang bis zum Token. Daraus baut Zeile 85 einen regulären Ausdruck der Form »/^.../« mit einem Anker für den Zeilenanfang. Die Funktion »quotemeta()« stellt sicher, dass die eventuell enthaltenen Sonderzeichen nicht mit Regex-Metazeichen kollidieren, indem sie alles mit einem Backslash maskiert.

Das Skript »ppitags« erzeugt eine Liste von dreispaltigen Einträgen in »~/.ptags.txt« im Format »Package/Subroutine [tab] Dateiname [tab] Regex«, die Vim mit »:set tags=« einliest und damit elegant von Schlüsselwörtern zum entsprechenden Sourcecode springt. Das Skript sollte täglich per Cronjob aufgerufen werden, damit »~/.ptags.txt« immer auf dem neuesten Stand ist. Wer möchte, kann es noch so erweitern, dass Vim auch zur Definition voll qualifizierter »our«-Variablen springt.

Die Datei ».vimrc« im Homeverzeichnis wird von Vim beim Programmstart eingelesen und erlaubt es, eine ganze Litanei von Kommandos auszuführen, bevor der Editor die eigentliche Arbeit beginnt. Wer die Standardeinstellungen interaktiv verschraubt hat, möchte diese wahrscheinlich permanent festhalten.

Statt alle bereits eingegebenen Kommandos nochmals manuell in die Datei ».vimrc« einzutragen, genügt ein einfaches »:mkvimrc«, mit dem Vim alle zu dieser Zeit gültigen Einstellungen in seinem Preferences-File abspeichert. Auf [1] liegt eine Beispielkonfiguration mit allen im Beitrag behandelten Vorgaben. Wer beim Tippen spart, hat mehr Zeit zum Denken! (jcb)

Listing 2:
».vimrc«

01 version 6.0
02 :map !L iuse Log::Log4perl qw(:easy);<RETURN> Log::Log4perl->easy_init($DEBUG);<RETURN><ESC>
03 :map F o<ESC>43i#<ESC>yyosub {<ENTER><ESC>Pk$i
04 map f !Gperl -MText::Autoformat -e'autoformat{right=>70}'^V^M
05 set backspace=2
06 set fileencodings=utf-8,latin1
07 set formatoptions=tcql
08 set helplang=en
09 set history=50
10 set hlsearch
11 set ruler
12 set shiftwidth=4
13 :autocmd FileType perl :set cindent
14 :autocmd FileType perl :set expandtab
15 set smarttab
16 :nnoremap X :w<Enter>:!perl -c %<Enter>
17 :set tags=/home/mschilli/.ptags.txt
18 :set iskeyword+=:

Infos

[1] Listings zu diesem Artikel: [ftp://linux-magazin.de/pub/listings/magazin/2005/07/Perl]

[2] Homepage des Vim-Projekts: [http://www.vim.org]

[3] Mike\'s Script Archive, Tmpl-Skript: [http://perlmeister.com/scripts/tmpl]

Der Autor

Michael Schilli arbeitet als Software-Engineer bei Yahoo! in Sunnyvale, Kalifornien. Er hat "Goto Perl 5" (deutsch) und "Perl Power" (englisch) für Addison-Wesley geschrieben und ist unter [mschilli@perlmeister.com] zu erreichen. Seine Homepage: [http://perlmeister.com]

[3] Mike\'s Script Archive, Tmpl-Skript: [http://perlmeister.com/scripts/tmpl]


Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Umlaute auf Umwegen Ein Blick hinter die Kulissen der Zeichensätze und Kodierungen
Muschelperle Shell-Funktionen in Perl nachgebaut
Übersetzungskünstler Parser im Eigenbau mit Perl
Füttern nach Programm Tipps täglich verschicken
Prüfungsfrage Vim-Makros in Perl schreiben
Babylon zu fünft Populäre Programmiersprachen treten gegeneinander an
Whitepaper
Daten Migration - Eine Publikation von Bloor Research

Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.

Download PDF (Registrierung erforderlich)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)