Usar objetos de .NET con PerlNET 


F. Javier García Castellano
Web: http://geneura.ugr.es/~javi, Mail: fjgc@decsai.ugr.es
Empezando con PerlNETInicioCrear componentes de .NET con Perl

(C) GeNeura Team
Web: http://geneura.ugr.es, Mail: tutti@geneura.ugr.es

1.- Usar objetos de .NET

Veamos con un ejemplo como usar un objeto de .NET, como usar su métodos y como acceder a sus variables de instancia:

Ejemplo de uso de la clase System.Text.StringBuilder mediante PerlNET:

# Llamamos al contructor de StringBuilder con argumentos
my $cadena = System::Text::StringBuilder->new("Hola");

# Llamamos a un método
$cadena->Append(" caracola.");

# Accedemos a las variables de instancia
print  " Cadena=".$cadena.
       " Longitud=".$cadena->{Length}.
       " Cadena[0]=".$cadena->[0]."\n";

#Cambiamos las variables de instancia
$cadena->{Length} = 13; # Quitamos el '.' del final
$cadena->[4] = '-';     # Cambiamos el espacio por la raya

# Volvemos a acceder a las variables de instancia
print  " Cadena=".$cadena.
       " Longitud=".$cadena->{Length}.
       " Cadena[0]=".$cadena->[0]."\n";

Echemos un vistazo al código. En la primera sentencia (my $cadena = System::Text::StringBuilder->new("Hola");) lo que hacemos es crear (llamar al constructor) un objeto System.Text.StringBuilder inicializado con la cadena "Hola". Como, a diferencia del primer ejemplo que vimos, no utilizamos ninguna declaración de espacio de nombre (namespace), tenemos que usar el nombre completo de la clase. Además para evitar problemas con el operador "." (que recordemos que era para concatenar cadenas) se utiliza dos veces dos puntos (::), es decir, en lugar de llamar a la clase como System.Text.StringBuilder, la llamamamos con System::Text::StringBuilder

En PerlNET el constructor siempre se llamará new y podrá (como cualquier constructor en Perl) aceptar parámetros, como es el caso del ejemplo. Perl siempre escoge el constructor adecuado en función de los tipos de los parámetros. Esto es importante y a tener en cuenta, en Perl el constructor siempre se llamará new y en .NET tendrá el mismo nombre que el objeto.

Si hubiesemos usado la directiva use namespace "System.Text", la llamada al constructor hubiese sido:

   my $cadena = StringBuilder->new("Hola");

Como podemos observar en la segunda sentencia ($cadena->Append(" caracola.");) los métodos se llaman como cualquier método en Perl, o sea, cuando se llama a los métodos en Perl o PerlNET, se tiene la misma sintaxis.

Después de la segunda sentencia, el objeto $cadena contiene el texto "Hola caracola.". Al usar el objeto $cadena en un contexto de cadenas (por ejemplo en el print) se llamará automaticamente al método ToString() para que no nos tengamos que preocupar de las conversiones.

Como podemos ver en la primera sentencia print se pueden acceder variables de instancia de un objeto, usando la sintaxis de los arrays asociativos (o tablas hash). Observar que se utilizan variables de instancia con nombre ($cadena->{Length}) o indexadas ($cadena->[0]). La salida de dicha sentencia será:

 Cadena=Hola caracola. Longitud=14 Cadena[0]=H

Después de la primera sentencia print (en $cadena->{Length} = 13; y $cadena->[4] = '-';), vemos como se modifica con una simple asignación las variables de instancia antes mostradas. Lo cual producirá, que en el último print la salida sea:

 Cadena=Hola caracola Longitud=13 Cadena[0]=H