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
