El siguiente fragmento de un módulo ilustra
el modo de uso de Class::Accessor . El módulo provee
un servicio de llamadas a procedimientos remotos desde un cliente
Perl a un servidor Perl situado en otra máquina. Los resultados
de la llamada son objetos de la clase GRID::Machine::Result
.
La línea 3 (use base qw(Class::Accessor)
)
indica que no sólo se usa el módulo Class::Accessor
sino que se hereda del mismo.
En la línea 5 definimos una lista con los atributos públicos del objeto.
En la línea 6 se construyen getter/setters para esos atributos.
pp2@nereida:~/LGRID_Machine/examples$ sed -ne '353,370p' Machine.pm | cat -n 1 package GRID::Machine::Result; 2 use List::Util qw(first); 3 use base qw(Class::Accessor); 4 5 my @legal = qw(type rstdout rstderr results); 6 GRID::Machine::Result->mk_accessors(@legal); 7 my %legal = map { $_ => 1 } @legal; 8 9 sub new { 10 my $class = shift || die "Error: Provide a class\n"; 11 my %args = @_; 12 13 my $a = ""; 14 die "Illegal arg $a\n" if $a = first { !exists $legal{$_} } keys(%args); 15 16 bless \%args, $class; 17 }
El constructor del ejemplo comprueba que todos los nombres de los argumentos son legales en la línea 14.
El siguiente código muestra un ejemplo de llamada:
$r = GRID::Machine::Result->new(%result); print $r->rstdout;
Casiano Rodríguez León