[quote=deepblack,15.02.2005, 16:58]
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:
my $object = $irgendwas->new();
ein konstruktor erwartet als ersten parameter aber die klasse und kein objekt, also
package MyClass;
sub new {
my $class = shift;
my $self = {};
bless($self, $class);
return $self;
}
package main;
my $object = MyClass->new(...);
Das mit dem
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:
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
...
\n\n
<!--EDIT|Strat|1108488625-->