Zum Inhalt springen

Perl-Modul

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 22. Mai 2011 um 07:08 Uhr durch Der Messer (Diskussion | Beiträge) (Objektorientierter Ansatz). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Mechanismus der Einbindung und Verwendung von Perl-Modulen

Ein Perl-Modul ist eine separate Komponente eines Computerprogramms, das in Perl geschrieben wurde.

Ein Modul besitzt seinen Quellcode in einem sogenannten package (package ist die Bezeichnung für Namensräume), z.B. CGI, Net::FTP oder XML::Parser; diese Struktur des Paketnamens (und damit des Namensraumnamens) spiegelt das Dateisystem wieder (sodass das Modul Net::FTP in der Datei Net/FTP.pm liegt). Darüber hinaus ist ein Perl-Modul als Klasse zu verwenden, falls objektorientierte Programmierung angewandt wird (in Perl sind Namensräume äquivalent mit Klassen, müssen jedoch nicht als solche verwendet werden).

Eine Sammlung von Modulen mit zugehöriger Dokumentation, Build-Skripten etc. bilden eine Distribution. Die Perl-Community besitzt eine große Sammlung an Distributionen verfügbar für Suche und Download auf CPAN.

Perl als Programmiersprache erlaubt vielfältige Programmierstile. Man kann sowohl ein Modul finden, das prozedural ("herkömmlich") geschrieben ist (z.B. Test-Simple), als auch Module mit objektorientierten Schnittstellen (z.B. XML::Parser), und sowohl das eine als auch das andere können ihre Aufgaben effizient erfüllen, da es u.a. auf den Kontext ankommt: In Verbindung mit XML ist eine objektorientierte Modulschnittstelle als bei simpleren Themen. Module können auch als Mixin-Methoden genutzt werden oder ein Pragma sein (z.B. strict), was dann einen unmittelbaren Effekt auf das Programm hat. Außerdem können Module genutzt werden, um die Syntax der Sprache selbst zu ändern. Module haben meist nur einen Effekt auf den Sichtbarkeitsbereich, in dem sie geladen wurden (meist eine Datei).

Perl-Modulen ist es gemein, eingebettete Dokumentation als Plain Old Documentation zu besitzen. POD ist flexibel genug, Artikel, Webseiten oder gar Bücher zu schreiben (z.B. Programming Perl), im Gegensatz zu javadoc, das auf die Dokumentation von Klassen spezialisiert ist. Normalerweise folgen die Dokumentationen der Struktur einer manpage.

Der Code auf dieser Seite basiert auf Perl 5.6.0 und sollte somit auch mit Perl > 5.6.0 ausgeführt werden können.

Beispiele

Eine "Hello-World-Funktion" kann auf verschiedene Weise mit Modulen realisiert werden, wobei es nicht zwingend ist, die Funktion in ein Modul zu packen (im Gegensatz zu Java; vielmehr kann eine Funktion überall definiert und genutzt werden (in Modulen ebenfalls über Einbindung mit use. werden. Eine Hello World-Funktion sähe so aus:

sub hello() { return "Hello, World!\n"; 
print hello();

Oder aber, um einiges einfacher:

print "Hello, World!\n";

Prozeduraler Ansatz

In hello.pm wird die Funktion hello() definiert und implementiert, die im Hauptscript main.pl ausgeführt wird.

main.pl:

#!/usr/bin/perl -w
use strict;  # Pragma strict wird genutzt, sodass eine besonders strenge Prüfung durchgeführt wird
use hello::world;   # hello.pm liegt in hello/world.pm

hallo();
hallo("Erde");

hello.pm:

use strict;
use warnings;  # äquivalent zu perl -w

# Zeilen mit einem "=" kennzeichnen integrierte PO-Dokumentation.
# Ein POD-Abschnitt endet mit "=cut" und kann an beliebiger Stelle stehen.

=head1 NAME
Hello:World -- DIE Hello-World-Implementierung.

=head1 ZUSAMMENFASSUNG

use Hello::World;
hallo();
hallo("Erde");

=head2 Funktionen

Folgende Funktionen stehen zur Verfügung:

=head3 hallo()

hallo()
hallo($etw_anderes)

=head1 Autor

Otto Normalhacker <otto@normalo.de>

=cut

sub hallo(;$)
{
    my $et_anderes = shift @_;
    defined $etw_anderes ? print "Hello $etw_anderes !\n" : print "Hello world!\n";
}

return 1; # Jedes Perl-Modul muss einen wahren Wert an den Compiler liefern, sonst gibt es einen Error


Objektorientierter Ansatz

Objektorientierte Lösungen erfordern in allen Sprachen mehr Code und besitzen eine geringere Effizienz in der Ausführung. Während der Entwicklung ist die Objektorientierung allerdings oft effizienter als eine prozedurale Lösung. In Perl ist die Objektorientierung durch Referenzen (Skalare mit einer Speicheradresse) auf Code und einen Hash realisiert.

main.pl: <source lang="perl">

  1. !/usr/bin/perl -w

use strict; use Hello::World; # Modul liegt in Hello/World.pm



World.pm: <source lang="perl"> package Hello::World; # Im objektorientierten Ansatz muss der Namensraum definiert sein, da in perl ein Namensraum auch Klasse ist