Deutsche PerlFAQ

NAME

perlfaq3 - Programmierwerkzeuge


DESCRIPTION

Dieser Abschnitt der FAQ beantwortet Fragen bezüglich Programmierwerkzuge und Programmierunterstützung.

Wie mache ich (irgendwas)?

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.

Wie kann ich Perl interaktiv benutzen?

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.

Gibt es eine Perl shell?

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.

Wie finde ich heraus, welche Module auf meinem System installiert sind?

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

Wie debugge ich meine Perl-Programme?

(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.

Wie profile ich meine Perl-Programme?

(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 .

Wie erstelle ich Quer-Referenzen meiner Perl-Programme?

Das B::Xref Modul kann zum Generieren von Quer-Referenz-Berichte für Perl-Programme zu erzeugen.

    perl -MO=Xref[,OPTIONS] scriptname.plx

Is there a pretty-printer (formatter) for Perl?

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.

Is there a ctags for Perl?

(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

Is there an IDE or Windows Perl Editor?

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):

Eclipse

http://e-p-i-c.sf.net/

The Eclipse Perl Integration Project integrates Perl editing/debugging with Eclipse.

Enginsite

http://www.enginsite.com/

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.

Komodo

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.

Notepad++

http://notepad-plus.sourceforge.net/

Open Perl IDE

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

http://www.optiperl.com/

OptiPerl is a Windows IDE with simulated CGI environment, including debugger and syntax highlighting editor.

Padre

http://padre.perlide.org/

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.

PerlBuilder

http://www.solutionsoft.com/perl.htm

PerlBuilder is an integrated development environment for Windows that supports Perl development.

visiPerl+

http://helpconsulting.net/visiperl/

From Help Consulting, for Windows.

Visual Perl

http://www.activestate.com/Products/Visual_Perl/

Visual Perl is a Visual Studio.NET plug-in from ActiveState.

Zeus

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''.