Thread Tipps um Module zu schreiben: was gibt es zu beachten, oop oder nicht? (15 answers)
Opened by deepblack at 2005-02-15 16:33

Strat
 2005-02-15 19:27
#51722 #51722
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=deepblack,15.02.2005, 16:58]
Code: (dl )
1
2
3
4
5
6
sub new {
       my $class = shift;
...
       bless($self,$class);
...
}

... 'attempt to bless into reference..' ...[/quote]
Diese Fehlermeldung kannst du eigentlich nur bekommen, wenn $class eine Referenz ist, d.h. du musst new irgendwie folgendermaszen aufgerufen haben:
Code: (dl )
my $object = $irgendwas->new();

ein konstruktor erwartet als ersten parameter aber die klasse und kein objekt, also
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
package MyClass;
sub new {
  my $class = shift;
  my $self = {}; # usw
  bless($self, $class);
  return $self;
}
package main;
my $object = MyClass->new(...);

Das mit dem
Code (perl): (dl )
1
2
3
my $this = shift;
my $class = ref($this) || $this;
my $self = {};

brauchst du nur, wenn du willst, dass dein konstruktor sowohl mit $object->new (zum klonen) als auch MyClass->new aufgerufen werden soll; wenn du wirklich eine Klonfunktion brauchst, dann ist es besser, wenn du sie auch ->clone oder so aehnlich nennst; wenn du sowas doch umbedingt machen willst, dann schlage ich vor, es folgendermaszen zu machen:
Code (perl): (dl )
1
2
3
4
sub new {
  my $proto = shift;
  my $class = ref($proto) || $proto; # Cargo Cult Programming
  ...
\n\n

<!--EDIT|Strat|1108488625-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Tipps um Module zu schreiben: was gibt es zu beachten, oop oder nicht?