El Módulo Class::Accessor

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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19