in reply to Re: Re: OO - problem with inheritance
in thread OO - problem with inheritance

my $parameter_config = __PACKAGE__->SUPER::parameter_config; $parameter_config->{max_length}{max} = 255; $parameter_config->{max_length}{default} = 255; sub parameter_config { $parameter_config }
This should work if you want to register your parameters in base_class. BTW you don't need to override parameter_config at all in this case because SUPER->parameter_config returns hash reference stored in $parameter_config variable in base class. So next two lines do affect hash used by base_class. If it is not desired effect you should clone that hash:
use Storable qw(dclone); my $parameter_config = dclone(__PACKAGE__->SUPER::parameter_config); $parameter_config->{max_length}{max} = 255; $parameter_config->{max_length}{default} = 255; sub parameter_config { $parameter_config }
Update: Fixed usage of wrong syntax (SUPER->method instead of __PACKAGE__->SUPER::method)

--
Ilya Martynov (http://martynov.org/)

Replies are listed 'Best First'.
Re: Re: Re: Re: OO - problem with inheritance
by uwevoelker (Pilgrim) on Jan 14, 2002 at 21:14 UTC
    The hash would need to be cloned. But I have an other idea - see my other posting titled "new idea - please comment on this".
    Thanks.
Re: Re: Re: Re: OO - problem with inheritance
by uwevoelker (Pilgrim) on Jan 16, 2002 at 23:27 UTC
    Hello Ilya,
    I need your help. I have written an Parameter::Validate module. And now I would like to use it as you said.
    use strict; use lib '/home/uwe/cvs/perl'; use lib '/home/uwe/cvs/perl/module'; use Parameter::Validate; use base 'CCS::Data::Datatype::base_class'; # parameter configuration #my $pv = CCS::Data::Datatype::base_class->pv->clone; my $pv = SUPER->pv->clone; $pv->enable(qw(mandatory min_length max_length)); $pv->change(max_length => {max => 255, default => 255}, min_length => {max => 255}); sub pv { $pv; }
    If I use the full qualified parent class name (CCS::Data::Datatype::base_class->pv) everything works like expected. But if I use the line with SUPER->pv I get an error: Can't locate object method "pv" via package "SUPER" (perhaps you forgot to load "SUPER"?) at /home/uwe/cvs/perl/CCS/Data/Datatype/String.pm line 16.
    So, what is wrong with SUPER?

    Thank you, Uwe
      I'm sorry I gave you example which uses wrong syntax. See updated node for fix. Instead of SUPER->pv it should be YourPackage->SUPER::pv. Here YourPackage is full qualified name of your subclassed package. Also you can use special token __PACKAGE__ instead of YourPackage. It will be substituted by Perl with this name.

      BTW be careful with selection of package name. FYI CPAN already has Params::Validate. It is not same name but very close.

      --
      Ilya Martynov (http://martynov.org/)