• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Perl: Unterschied Modul, Package, Klasse

daryY

Neues Mitglied
Hey Leute ;)

Hier bin ich mal wieder... Und mal wieder mit einer weiteren Frage =)
Und zwar wollte ich mal wissen, was denn jetzt genau der Unterschied zwischen einer Klasse, einem Package und einem Modul ist.
In Perl 6 sind Klassen ja so zimelich so aufgebaut wie in C++ - aber in Perl 5 scheint eine Klasse mit einem Package definiert zu werden. Versteh ich nicht ganz.
Hoffe auf eine verstädnlcihe Erklärung =)

LG
DaryY
 
Werbung:
Modul: Das ist die Datei (Endung: .pm)

Ein Modul kann 0 bis mehrere "package"s haben - wobei mehrere packages zu verwenden natürlich *nicht* Best Practice ist!

Man kann sagen, dass jede Klasse ein Package ist, aber nicht jedes Package ist eine Klasse. Da es in Perl ursprünglich keine Objektorientierung gab, ist das etwas schwamming. Im Prinzip definiert sich eine Klasse darüber, dass es ein package ist mit einem Konstruktor (den Du so nennen darfst wie Du willst). Ein Konstruktor ist eine Subroutine/Methode, die ein ge"bless"ten Skalar zurückliefert.

Beispiel Non-OO-Package (MyTest.pm):

PHP:
package MyTest;

use strict;
use warnings;

sub print_hallo {
     print "hallo\n";
}

1; # Wahren Wert zurückliefern
In dem Fall ist es ein Modul (weil .pm-Datei) und ein einfaches package.

Das kann man dann so verwenden (z.B. test.pl):

PHP:
#!/usr/bin/perl

use strict;
use warnings;

use MyTest;

MyTest::print_hallo();
Beispiel einer Klasse (MyTestOO.pm):

PHP:
package MyTestOO;

use strict;
use warnings;

sub new {
     my ($class) = @_;
     my $self = bless {}, $class; # das ist das eigentliche Erzeugen eines Objekts

     return $self;
}

sub print_hallo {
     my ($self) = @_; # $self ist das Objekt, wird durch das $obj->print_hallo automatisch übergeben
     print "hallo\n";
}

1; # Module müssen immer einen "wahren" Wert zurückliefern
Verwendung:
PHP:
#!/usr/bin/perl

use strict;
use warnings;

use MyTestOO;

my $obj = MyTestOO->new;
$obj->print_hallo();
 
Zuletzt bearbeitet:
Oder etwas kürzer formuliert.

Ein package ist erstmal ein Namensraum , also ein von deinem Hauptskript getrennter Bereich. Ein Modul ist ein separate Datei mit einem (oder auch mehreren) package und eine Klasse ist ein "gesegnetes" package.
 
Werbung:
Zurück
Oben