Deutsche PerlFAQ
perlfaq3 - Programmierwerkzeuge
Dieser Abschnitt der FAQ beantwortet Fragen bezüglich Programmierwerkzuge und Programmierunterstützung.
Hast Du auf CPAN nachgeschaut (siehe perlfaq2)? Die Chancen sind gut, dass jemand bereits ein Modul geschrieben hat, das Dein Problem löst. Hast Du die entsprechenden Hilfeseiten gelesen? Hier eine kurze Übersicht:
Grundlagen perldata, perlvar, perlsyn, perlop, perlsub
Ausführung perlrun, perldebug
Funktionen perlfunc
Objekte perlref, perlmod, perlobj, perltie
Datenstrukturen perlref, perllol, perldsc
Module perlmod, perlmodlib, perlsub
Reguläre Ausdrücke perlre, perlfunc, perlop, perllocale
Umstieg auf perl5 perltrap, perl
Verknüpfen mit C perlxstut, perlxs, perlcall, perlguts, perlembed
Verschiedenes http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz
(keine Hilfeseite, trotzdem nützlich, eine Sammlung
verschiedener Essays über Perl-Techniken)
Eine grobe Inhaltsübersicht für die Hilfeseiten von Perl ist in perltoc zu finden.
Der typische Ansatz benutzt den Perl-Debugger, der in der perldebug(1) Hilfeseite
beschrieben ist, mit einem ``leeren'' Programm, wie dieses:
perl -de 42
Jetzt einfach jeglichen gültigen Perl-Code eingeben und es wird unmittelbar evaluiert. Du kannst auch die Symboltabelle inspizieren, den Backtrace des Stacks holen, Werte von Variablen prüfen, Breakpoints setzen und andere Operationen, die typischerweise in symbolischen Debuggern zu finden sind.
Die psh (Perl sh) is aktuell bei Version 1.8. Die Perl Shell ist eine shell
die die interaktiven Eingenschaften einer Unix shell mit der Mächtigkeit von Perl
vereint. Das Ziel ist eine shell mit allen Features, die sich verhält, wie man es
für normale shell Aktivitäten erwartet und Perl-Syntax und -Funktionalitäten für
Kontrollfluss Befehle und andere Dinge verwendet. Du kannst psh unter
http://sourceforge.net/projects/psh/ bekommen.
Zoidberg ist ein ähliches Projekt und bietet eine shell in perl geschrieben,
in perl konfiguriert und in perl betrieben. Es ist als eine Login shell und
Entwicklungsumgebung gedacht. Es ist unter
http://pardus-larus.student.utwente.nl/~pardus/projects/zoidberg/ zu finden oder
auf Deinem nächsten CPAN-Spiegel.
Das Shell.pm Module (mit Perl verteilt) bringt Perl dazu, Kommandos als
Shell-Kommandos zu probieren, die nicht Teil der Sprache Perl sind. perlsh
aus der Quell-Distribution ist zu einfach und uninteresant, könnte aber dennoch
sein was Du willst.
Aus der Kommandozeile, kannst Du den -l-Schalter des cpan Kommandos benutzen:
$ cpan -l
Du kannst auch den -a-Schalter von cpan verwenden, um eine autobundle-Datei
zu erstellen, die CPAN.pm versteht und benutzen kann um jedes Modul wieder zu
installieren:
$ cpan -a
Innerhalb eines Perl-Programms kannst Du das ExtUtils::Installed Module verwenden
um alle installieren Distributionen anzuzeigen, auch wenn es eine Zeit dauern kann
um seine Magie zu tun. Die Standard-Bibliothek, die mit Perl mitgeliefert wird,
wir nur als ``Perl'' angezeigt (auch wenn Du diese mit Module::CoreList holen kannst).
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();
Wenn Du eine Liste mit allen Dateinamen der Perl-Module haben willst, kannst Du
File::Find::Rule verwenden:
use File::Find::Rule;
my @files = File::Find::Rule->
extras({follow => 1})->
file()->
name( '*.pm' )->
in( @INC )
;
Wenn Du dieses Modul nicht hast, kannst Du das gleiche mit File::Find machen,
das Teil der Standard-Bibliothek ist:
use File::Find;
my @files;
find(
{
wanted => sub {
push @files, $File::Find::fullname
if -f $File::Find::fullname && /\.pm$/
},
follow => 1,
follow_skip => 2,
},
@INC
);
print join "\n", @files;
Wenn Du einfach eine schnelle Überprüfung brauchst, um zu sehen ob ein Modul verfügbar ist, kannst Du auf dessen Dokumentation prüfen. Wenn Du die Dokumentation lesen kannst, ist das Modul höchstwahrscheinlich installiert. Wenn Du die Dokumentation nicht lesen kannst, hat das Modul vielleicht keine (in seltenen Fällen):
$ perldoc Module::Name
Du kannst auch versuchen, das Modul in einem Einzeiler einzubinden, um zu sehen ob perl es findet:
$ perl -MModule::Name -e1
(beigetragen brian d foy)
Bevor Du irgendetwas anders machst, kannst Du Dir selbst helfen, indem Du sicherstellst, dass Du Perl Dir alles über Problemfelder in Deinem Code erzählt. Durch das Anschalten von Warnungen und ``Strictures'' kannst Du viele Probleme abfangen, bevor sie zu groß werden. Da kannst mehr darüber in strict und warnings herausfinden.
#!/usr/bin/perl
use strict;
use warnings;
Darüber hinaus, ist der einfachste Debugger die print Funktion. Benutze sie
um Werte anzuschauen wenn Du Dein Programm laufen lässt:
print STDERR "The value is [$value]\n";
Das Data::Dumper Modul kann Perl-Datenstrukturen schön ausgeben:
use Data::Dumper qw( Dumper );
print STDERR "The hash is " . Dumper( \%hash ) . "\n";
Perl kommt mit einem interaktiven Debugger, den Du mit dem -d-Schalter starten
kannst. Er wird vollständig in perldebug erklärt.
Wenn Du eine Graphische Benutzeroberfläche haben möchtest und Tk hast, kannst
Du ptkdb verwenden. Es ist auf CPAN und frei erhältlich.
Wenn Du etwas anspruchsvolleres und kontrollierbares brauchst, dann gibt Dir Leon
Brocard's Devel::ebug (das Du mit dem -D-Schalter als -Debug aufrufen
kannst) den programmatischen Aufhänger für alles was Du braucht um Deinen eigenen
Debugger zu schreiben (ohne allzuviel Mühen und Leid).
Du kannst auch einen kommerziellen Debugger wie Affrus (Mac OS X), Komodo von Activestate (Windows und Mac OS X) oder EPIC (die meisten Plattformen) benutzen.
(beigetragen von brian d foy, aktualisiert Fr Jul 25 12:22:26 PDT 2008)
Der Devel Namensraum beinhaltet etliche Module, die Du zum Profilen Deiner
Perl-Programme benutzen kannst. Das Devel::DProf Modul ist bei Perl dabei und
Du kannst es mit dem -d-Schalter aufrufen:
perl -d:DProf program.pl
Nachdem Dein Programm unter DProf gelaufen ist, bekommst Du eine tmon.out
Datei mit den Profil-Daten. Um diese Daten anzuschauen, kannst Du sie in einen
menschlich lesbaren Bericht mit dem dprofpp-Programm umwandeln, das mit
Devel::DProf mitkommt.
dprofpp
Du kannst das Profiling und das Reporting auch in einem Schritt mit der -p
Option von dprofpp machen:
dprofpp -p program.pl
Das Devel::NYTProf (New York Times Profiler) macht beides, Befehls- und
Subroutinen-Profiling. Es ist auf CPAN verfügbar und Du kannst es auch mit der
-d Option aufrufen:
perl -d:NYTProf some_perl.pl
Wie DProf erzeugt es eine Datenbank mit den Profil-Informationen, die Du in einen
Bericht umwandeln kannst. Das nytprofhtml Kommando wandelt die Daten in einen
HTML-Report um, ähnlich dem Devel::Cover-Report:
nytprofhtml
CPAN hat etliche andere Profiler, die Du in der gleichen Art aufrufen kannst.
Du könntest auch daran interessiert sein, Benchmark zu benutzen, um Code-Teile
zu messen und zu vergleichen.
Du kannst mehr über Profiling in Programming Perl, Kapitel 20 oder Mastering Perl, Kapitel 5 lesen.
perldebguts beschreibt, wie man einen eigenen Debugger schreibt, wenn Du eine besondere Art von Profiler erstellen musst. brian d foy beschreibt den Vorgang in The Perl Journl, ``Creating a Perl Debugger'', http://www.ddj.com/184404522 und ``Profiling in Perl'' http://www.ddj.com/184404580 .
Perl.com hat zwei interessante Artikel über Profiling: ``Profiling Perl'' von Simon Cozens, http://www.perl.com/lpt/a/850 und ``Debugging and Profiling mod_perl Applications'' von Frank Wiles unter http://www.perl.com/pub/a/2006/02/09/debug_mod_perl.html .
Randal L. Schwartz schreibt über Profiling in ``Speeding up Your Perl Programs'' für Unix Review unter http://www.stonehenge.com/merlyn/UnixReview/col49.html und ``Profiling in Template Toolkit via Overriding'' für das Linux Magazine unter http://www.stonehenge.com/merlyn/LinuxMag/col75.html .
Das B::Xref Modul kann zum Generieren von Quer-Referenz-Berichte für
Perl-Programme zu erzeugen.
perl -MO=Xref[,OPTIONS] scriptname.plx
Perltidy is a Perl script which indents and reformats Perl scripts
to make them easier to read by trying to follow the rules of the
perlstyle. If you write Perl scripts, or spend much time reading
them, you will probably find it useful. It is available at
http://perltidy.sourceforge.net .
Of course, if you simply follow the guidelines in perlstyle, you shouldn't need to reformat. The habit of formatting your code as you write it will help prevent bugs. Your editor can and should help you with this. The perl-mode or newer cperl-mode for emacs can provide remarkable amounts of help with most (but not all) code, and even less programmable editors can provide significant assistance. Tom Christiansen and many other VI users swear by the following settings in vi and its clones:
set ai sw=4
map! ^O {^M}^[O^T
Put that in your .exrc file (replacing the caret characters with control characters) and away you go. In insert mode, ^T is for indenting, ^D is for undenting, and ^O is for blockdenting--as it were. A more complete example, with comments, can be found at http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz
The a2ps http://www-inf.enst.fr/%7Edemaille/a2ps/black+white.ps.gz does lots of things related to generating nicely printed output of documents.
(contributed by brian d foy)
Ctags uses an index to quickly find things in source code, and many popular editors support ctags for several different languages, including Perl.
Exuberent ctags supports Perl: http://ctags.sourceforge.net/
You might also try pltags: http://www.mscha.com/pltags.zip
Perl programs are just plain text, so any editor will do.
If you're on Unix, you already have an IDE--Unix itself. The UNIX philosophy is the philosophy of several small tools that each do one thing and do it well. It's like a carpenter's toolbox.
If you want an IDE, check the following (in alphabetical order, not order of preference):
The Eclipse Perl Integration Project integrates Perl editing/debugging with Eclipse.
Perl Editor by EngInSite is a complete integrated development environment (IDE) for creating, testing, and debugging Perl scripts; the tool runs on Windows 9x/NT/2000/XP or later.
http://www.ActiveState.com/Products/Komodo/
ActiveState's cross-platform (as of October 2004, that's Windows, Linux, and Solaris), multi-language IDE has Perl support, including a regular expression debugger and remote debugging.
http://open-perl-ide.sourceforge.net/
Open Perl IDE is an integrated development environment for writing and debugging Perl scripts with ActiveState's ActivePerl distribution under Windows 95/98/NT/2000.
OptiPerl is a Windows IDE with simulated CGI environment, including debugger and syntax highlighting editor.
Padre is cross-platform IDE for Perl written in Perl using wxWidgets to provide a native look and feel. It's open source under the Artistic License.
http://www.solutionsoft.com/perl.htm
PerlBuilder is an integrated development environment for Windows that supports Perl development.
http://helpconsulting.net/visiperl/
From Help Consulting, for Windows.
http://www.activestate.com/Products/Visual_Perl/
Visual Perl is a Visual Studio.NET plug-in from ActiveState.
http://www.zeusedit.com/lookmain.html
Zeus for Window is another Win32 multi-language editor/IDE that comes with support for Perl:
For editors: if you're on Unix you probably have vi or a vi clone already, and possibly an emacs too, so you may not need to download anything. In any emacs the cperl-mode (M-x cperl-mode) gives you perhaps the best available Perl editing mode in any editor.
If you are using Windows, you can use any editor that lets you work with plain text, such as NotePad or WordPad. Word processors, such as Microsoft Word or WordPerfect, typically do not work since they insert all sorts of behind-the-scenes information, although some allow you to save files as ``Text Only''.