Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
packagemyBEGIN-KonstruktorEND-Destruktorrequire
require.pm-Regel bei require@INC erweiternuseperldoc lesen@EXPORT, @EXPORT_OK und der Exporter.pm-DateiSelfLoader
AutoLoader weniger ladenautouse.pl-LibrariesIO-Modulels-lR.gzsrc/docportsscriptsauthorsmodulesCPAN-Modulmodules/-Verzeichnisses
package mypack; $var = "blah"; # Namensraum umschalten
package otpack; print $mypack::var; # Externe Variablen
# Wo sind wir, und von welchem Package wurden wir aufgerufen?
print "I'm in Package ", __PACKAGE__, " called from ", caller();
# my()-Variablen sind von anderen Dateien aus unsichtbar.
*symtab = *{ "${packname}:: " }; # %mypack:: Symboltabelle
BEGIN { ... } # Code zur Kompilierzeit schon ausfuehren
END { ... } # Ein atexit()-Handler
# Einbinden von Dateien ohne besondere Semantik
require 'path/to/a/perl-file.pl'; # Fremde Dateien einbinden
require ST::Warp; # Lädt ST/Warp.pm
# Einbinden von Modulen mit richtigem Import
use ST::Warp; # Laedt ST/Warp.pm aus @INC und importiert Namen
use Module qw(this that); # Diese Namen möchte ich haben!
1; # Am Ende von Modulen, für require() bzw. use().
use lib 'one/more/path/to/perl/modules'; # Erweitert @INC
require 5.005; # Mindestens diese Perl-Version!
# Verwenden Sie 'perldoc' statt 'man':
perldoc perlmod; perldoc -f chomp; perldoc Text::Warp
# Erstellen eigener Module; Modulschablone anlegen:
h2xs -A -X -n ST::WarpEngine
# Namensraum des Aufrufers mit eigenen Namen füllen
@EXPORT = qw(f1 f2 f3); # Diese Namen unbedingt exportieren
@EXPORT_OK = qw(fft ffo); # Aufrufer sagt: use Modul qw(fft);
# Module holen bzw. bauen und installieren:
perl -MCPAN -e shell # Module vom CPAN holen
perl Makefile.PL; make; make test; # Als normaler User
make install # Als root
# Wo ist der CPAN?
http://www.perl.com/CPAN # CPAN-Multiplexer
http://www.perl.com/CPAN/ # Umlenken zu einem CPAN-Server
package-scope.pl |
Gültigkeitsbereich von Packages |
apack.pl |
Zeigt die Verwendung von privaten Variablen |
atest.pl |
Zeigt die Verwendung privater Variablen an |
package-names.pl |
Zeigt die Namen eines Packages an |
ST/Beam/Beam.pm |
.pm-Definition des ST::Beam-Moduls |
ST/Beam/Changes |
Die Historie des ST::Beam-Moduls |
ST/Beam/test.pl |
Testdatei für das ST::Beam-Modul |
ST/Beam/Makefile.PL |
Meta-Makefile für das ST::Beam-Modul |
ST-Beam-0.01.tar.gz |
Das gesamte ST::Beam-Modul |
show-templib.pl |
Lädt ein Modul aus einem Privatverzeichnis |
ST/WarpEngine/WarpEngine.pm |
.pm-Definition des Moduls ST::WarpEngine |
ST-WarpEngine-0.01.tar.gz |
Das komplette ST::WarpEngine-Modul |
require und use:use Module LIST;
BEGIN { require Module; import Module LIST; }
Module ein Bareword sein muß. Das bedeutet insbesondere, daß neben dem Einlesen eines Perl-Modules zusätzlich die Methode import() des jeweiligen Moduls aufgerufen wird. Diese Methode kann einige Modulinitialisierungen durchführen. Die Funktion import() kann in jedem Modul beliebig definiert werden. Meistens wird diese Funktion durch das Modul Exporter bereitgestellt, mit der Semantik, daß die in LIST enthaltenen Bezeichnern in den Namensraum des Aufrufers exportiert (bzw. vom Aufrufer aus gesehen importiert) werden. (1999/12/03)
require() und my():require() wird eine Datei in das Hauptprogramm eingebunden, als wäre sie Teil des Hauptprogramms. Man könnte sich das Einbinden so vorstellen, als wäre der Inhalt der eingebundenen Datei integraler Bestandteil der Hauptdatei. Dem ist aber nicht so!. Daß es sich um zwei verschiedene Dateien handelt, kann mit Hilfe des my()-Operators leicht gezeigt werden. Folgendes Beispiel zeigt den Unterschied:
# Einzubindende Datei blah.pl: $var = "blah"; 1; # Einbindende Datei main.pl: my $var; require "blah.pl"; print $var; # leer, nicht etwa "blah"
$var als lexikalisch mittels my() deklariert wurde. Dadurch ist sie außerhalb jeglicher Symboltabelle plaziert worden. Als dann blah.pl mittels require() eingebunden wurde, ist der Inhalt von blah.pl mittels eval() ausgewertet worden, wobei eine neue Variable $var mit dem Wert blah versehen wurde. Die lexikalische Variable des Hauptprogramms blieb stattdessen erhalten und trat wieder in Kraft als require() fertig war.my, vorgestellten Phänomen, wobei hier nur ein einziges Package involviert wird. (2000/06/08, thanks to Carsten Gross).
In Vorbereitung
In Vorbereitung
$xxx_counter statt xxx_counter.Devel::Symdump statt Devel::Sysdump.Gimp): Ersetze Siehe auch bei Gtk... durch: Siehe auch bei Gtk-Perl....Gimp): Hinzufügen: Siehe auch Gtk-Perl.$pass durch $password.[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:44 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|