in reply to Re^2: Problem with Class
in thread Problem with Class and AUTOLOAD with GTK

Hi,

the methods you install in AUTOLOAD always reference their first invocant/arg. You will have to use something like (untested):

*{$AUTOLOAD} = sub {my ($self, $newval) = @_; $self->{$property_name} = $newval };
Cheers, Chris

Replies are listed 'Best First'.
Re^4: Problem with Class
by kapello (Initiate) on Jan 03, 2011 at 20:00 UTC
    Hi Chris! Great! I modify my Autoload.pm so ...
    package Autoload; use Locale::TextDomain ("kapello.it.$main::PROGRAM"); use Exporter; @ISA = qw (Exporter); @EXPORT = qw(AUTOLOAD); use Carp; sub AUTOLOAD{ my ($self, $newval) = @_; # Costruisco il metodo get if ($AUTOLOAD =~ /.*::get_(\w+)/){ my $property_name = $1; my $ref = ref($self->{$property_name}); if ($ref eq 'ARRAY'){ *{$AUTOLOAD} = sub { my ($self) = @_; @{$self->{$property_ +name}} }; my ($self) = @_; return @{$self->{$property_name}}; } else{ *{$AUTOLOAD} = sub {my ($self) = @_; $self->{$property_nam +e}}; my ($self) = @_; return $self->{$property_name}; } } # Costruisco il metodo set if ($AUTOLOAD =~ /.*::set_(\w+)/){ my $property_name = $1; *{$AUTOLOAD} = sub {my ($self, $newval) = @_; $self->{$propert +y_name} = $newval }; my ($self, $newval) = @_; return $self->{$property_name} = $newval; } # Deve esserci un errore croak __"Il metodo: $AUTOLOAD non è disponibile."; } 1;
    and seems works !!! Thank you!! ps. for now some test ... :-)