I am using the standard instantiation process: creating an instance of the parent class and reblessing it as an instance of the subclass.
That sounds quite broken. Perl classes usually have a constructor that takes the class name from the caller, not the package name, and blesses a reference into that class. No reblessing needed:
#!/usr/bin/perl use strict; use warnings; { package DemoA; sub new { my $class=shift; my $self=bless {},$class; return $self; } sub hello { my $self=shift; print $self->message(),"\n"; } sub message { my $self=shift; return 'Hello World'; } }; { package DemoB; use parent -norequire => 'DemoA'; sub message { my $self=shift; return 'Shalom'; } }; my $obja=DemoA->new(); $obja->hello(); # writes "Hello World" my $objb=DemoB->new(); $objb->hello(); # writes "Shalom"
It is possible to use a modified constructor, using the SUPER notation:
sub new { my $class=shift; my $self=$class->SUPER::new(@_); $self->{'x'}='y'; return $self; }
Still, no reblessing needed.
Alexander
In reply to Re^5: Invoking bless triggers "Can't resolve method ..." error
by afoken
in thread Invoking bless triggers "Can't resolve method ..." error
by turkanis
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |