Un ejemplo muy sencillo:
- Código: Seleccionar todo
1 #!/usr/bin/perl -l
2
3 package Coches;
4 use strict;
5
6 sub new {
7 my $Coche = 4;
8 bless \$Coche;
9 return \$Coche;
10 }
11
12 sub ver_puertas {
13 my $coche = shift;
14 print $$coche;
15 }
16
17 sub poner_puertas {
18 my $coche = shift;
19 $$coche = shift;
20 }
21
22 package main;
23 use strict;
24
25 my $auto = Coches->new();
26 $auto->ver_puertas;
27 $auto->poner_puertas(2);
28 $auto->ver_puertas;
29
30 __OUTPUT__
4
2
En este programa, además de la parte principal (main), tenemos definido un paquete llamado Coches.
* En la línea 6 a 10 definimos un método llamado new (por tradicción, pero podría ser cualquier otro nombre). Se encargará de dar consistencia a la creación de objetos.
* En la sétptima línea declaramos y definimos nuestro espacio para guardar la información de nuestro objeto. En nuestro caso, será un simple escalar, que, de momento, guarda el valor '4'.
* En la octava, 'bendecimos' a nuestro escalar con la función bless. Lo que hacemos en ese momento es asociar el nombre de nuestra clase con nuestro espacio de almacenamiento. Se podría decir también que estamos 'bautizando' a nuestro espacio de almacenamiento con un cierto nombre (en nuestro caso, 'Coches').
* En la novena, salimos, devolviendo una referencia a nuestra variable. Realmente, lo que tenemos que devolver es siempre una referencia, para que podamos refererirnos a ella más tarde.
* Luego siguen dos métodos. En el primero, sacamos a pantalla el valor de nuestro espacio de almacenamiento (nuestro escalar). En 'ver_puertas', se recibe como primer argumento la referencia a nuestro objeto. Y con una desreferencia sacamos el valor. Si pusieramos ahí un
print ref $coche; nos devolvería el nombre de la clase a la que pertenece $coche, que es 'Coches'.
* En 'poner_puertas' hacemos al revés, ponemos un valor.
* En el paquete principal, creamos un nuevo objeto (línea 25). Nos devuelve una referencia a un objeto 'Coches'. Como sabemos que es una referencia a un escalar, podríamos hacer un
print $$auto para obtener el valor del objeto, PERO no es la forma correcta de programar OO. Hay que intentar siempre usar métodos de acceso (por aquello de la encapsulación de datos).
* Finalmente, lo que hacemos es sacar el valor actual de nuestro objeto, modificarlo y volver a mostrarlo.