La escritura de los métodos get/set es monótona y pesada. Si el objeto tiene 20 atributos habrá que escribir un buen número de métodos.
Podemos usar AUTOLOAD para que, cada vez que se llama a un método de acceso se instale en la tabla de símbolos. Para ello usaremos un ''typeglob'' y una subrutina anónima.
Sigue el código:
 1 sub AUTOLOAD {
 2   no strict "refs";
 3 
 4   my $self = shift;
 5   if ($AUTOLOAD =~ /\w+::\w+::get(_.*)/) {
 6     my $n = $1;
 7     die "Error in $AUTOLOAD: Illegal attribute\n" unless exists $self->{$n};
 8 
 9     # Declarar el metodo get_*****
10     *{$AUTOLOAD} = sub { return $_[0]->{$n}; };
11 
12     return $self->{$n};
13   } elsif ($AUTOLOAD =~ /\w+::\w+::set(_.*)/) {
14     my $n = $1;
15     die "Error in $AUTOLOAD: Illegal attribute\n" unless exists $self->{$n};
16     $self->{$n} = shift;
17 
18     # Declarar el metodo set_*****
19     *{$AUTOLOAD} = sub { $_[0]->{$n} = $_[1]; };
20   } else {
21     die "Error: Function $AUTOLOAD not found\n";
22   }
23 }
En la línea 5 obtenemos el nombre del atributo y lo guardamos (línea 6)
en $n. En la línea 7 comprobamos que tal atributo existe.
La subrutina anónima que crea AUTOLOAD 
en la línea 10 es una clausura con respecto a $n: 
el valor se recuerda, incluso después que se haya
salido del ámbito.
Casiano Rodríguez León
