Ok, for the non french reader, this is the AUTOLOAD method generating code :
sub AUTOLOAD{
my ($self,$value)= @_ ;
return if $AUTOLOAD =~ /::DESTROY$/ ;
my $attname = $AUTOLOAD;
$attname =~ s/.*::// ;
if(! exists $self->{$attname}){
Carp::confess("Attribute $attname does not exists in $self");
}
my $pkg = ref($self ) ;
my $code = qq{
package $pkg ;
sub $attname {
my \$self = shift ;
\@_ ? \$self->{$attname} = shift :
\$self->{$attname} ;
}
};
eval $code ;
if( $@ ){
Carp::confess("Failed to create method $AUTOLOAD : $@");
}
goto &$AUTOLOAD ;
}