Exporter nicht nötig?
am 17.05.2006 23:17:00 von Torsten Mohr
Hallo,
die unten angehängten Dateien stellen ein Beispiel dar,
es läuft soweit ganz gut, was mich aber wundert ist daÃ
ich die Funktion 'new' nicht per Exporter bekannt machen
muÃ.
Oder übersehe ich da was?
Danke für Tips,
Torsten.
File OO1.pm:
package OO1;
sub new {
 my ($class, $par1, $par2) = @_;
 my $self = {par1 => $par1, par2 => $par2};
 print "Konstruktor $class\n";
 bless $self, $class;
 return $self;
}
sub show {
 my ($self) = @_;
 print "par1 $$self{par1}\n";
 print "par2 $$self{par2}\n";
}
1;
File test.pl:
use OO1;
my $obj1 = OO1->new(7, 3);
my $obj2 = new OO1(3, 4);
$obj1->show();
$obj2->show();
show $obj2;
Re: Exporter nicht nötig?
am 18.05.2006 10:47:03 von Frank Seitz
Torsten Mohr wrote:
> was mich aber wundert ist daÃ
> ich die Funktion 'new' nicht per Exporter bekannt machen
> muÃ.
>
> Oder übersehe ich da was?
Exporter brauchst Du nur, wenn Du Subroutines (u.a.) in einen
anderen Namespace (package) mappen möchtest, so dass sie
dort ohne Angabe des Ursprungspackage gerufen
werden können.
Wenn Du in Perl OO-programmierst, brauchst Du
dieses Konzept überhaupt nicht. Denn dann ist das
Package entweder explizit über den Klassennamen
oder implizit über das Objekt gegeben. Zusätzlich
wird natürlich auch noch die Vererbungshierarchie
herangezogen (Methodensuche).
Kurz gesagt: Vergiss Exporter.
GrüÃe
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Exporter nicht nötig?
am 18.05.2006 11:39:34 von df4or
Am Wed, 17 May 2006 23:17:00 +0200 schrieb Torsten Mohr:
> die unten angehängten Dateien stellen ein Beispiel dar,
> es läuft soweit ganz gut, was mich aber wundert ist daß
> ich die Funktion 'new' nicht per Exporter bekannt machen
> muß.
>
> Oder übersehe ich da was?
[...]
> File OO1.pm:
> package OO1;
>
> sub new {
[...]
> return $self;
> }
> my $obj1 = OO1->new(7, 3);
Der Aufruf von new erfolgt über den Klassennamen (OO1->new). D.h. Perl
guckt selbstständig im package der Klasse nach, daher braucht das nicht
exportiert zu werden (vereinfacht gesprochen).
Nachdem $obj1 dann mal instantiiert wurde, ist die Relation ja bekannt:
$obj1 ist 'blessed' in package OO1. Auch kein Export nötig.
Gruß,
Ekki
Re: Exporter nicht nötig?
am 18.05.2006 18:47:01 von Torsten Mohr
Hallo,
> Wenn Du in Perl OO-programmierst, brauchst Du
> dieses Konzept überhaupt nicht. Denn dann ist das
> Package entweder explizit über den Klassennamen
> oder implizit über das Objekt gegeben. Zusätzlich
danke (an alle) für den Tip / die Tips, das erklärt
das Verhalten.
GrüÃe,
Torsten.