[Perl] POO en Perl

Salvador Ortiz Garcia sog@msg.com.mx
Fri, 08 Aug 2003 15:14:21 -0500


On Fri, 2003-08-08 at 13:16, Gunnar Wolf wrote:
> Pablo Fischer dijo [Fri, Aug 08, 2003 at 12:01:25PM +0000]:
> > Gracias!
> > 
> > De hecho despues de haber mandado el correo, encontré el tema de métodos 
> > 'privados' (sí sí, soy terco), y me venía que si realmente quería hacer eso 
> > es:
> > 
> > my $nombre_metodo = sub {
> > 	my $this = shift;
> > 
> > ...Todo_el_Choro...
> > };
> > 
> > Y dentro de otros métodos, para accesar a este seria:
> > 
> > $this->$nombre_metodo("argumentos");
> > 
> > ahora les pregunto, que tan bueno y real es esto, realmente crea un método 
> > privado (sí sí, soy terco, jej)
> 
> Sí, puedes usar métodos privados de esta manera... Pero se vuelve feo y
> poco claro. Es válido, pero dentro del estilo de Perl la gente tiende a
> decirte que usar métodos privados es feo y no de cuates :)

Con el agravante adicional de que en realidad así estas creando un
"closure" con sus efectos asociados. 

Respecto a si es un método prueba

    $nombre_metodo->($this,"argumentos");

Y en todo caso te haría falta crear un ambito lexico propio para esos
"metodos", o correes el riesgo de:

    package Foo::Bar;

    sub new { return bless {}, __PACKAGE__ }
    my $private = sub { "hola\n" };
    sub callpriv { $_[0]->$private() }

    package main;

    my $obj = new Foo::Bar;
    print $obj->callpriv;
    $private = 'adios';
    print $obj->callpriv;

Saludos,

[ oops, teclazo anticipado en mail anterior ]

-- 
Salvador Ortiz Garcia <sog@msg.com.mx>
Matías Software Group