Estructura del Constructor

Activando $Data::Dumper::Deparse podemos ver la forma del constructor proporcionado:

DB<23> use Data::Dumper
DB<24> $Data::Dumper::Deparse = 1
DB<25> p Dumper(\&Foo::new)
$VAR1 = sub {
    package Foo;
    use strict 'refs';
    my($class, %init) = @_;

    $class = 'Foo' unless @_;

    my($r) = {};

    if (defined $init{'c'}) {
        if (ref $init{'c'} eq 'HASH') {
            $$r{'Foo::c'} = 'Tutu'->new(%{$init{'c'};});
        }
        elsif (UNIVERSAL::isa($init{'c'}, 'Tutu')) {
            $$r{'Foo::c'} = $init{'c'};
        }
        else {
            croak('Initializer for c must be hash or Tutu reference');
        }
    }
      croak('Initializer for h must be hash reference') 
    if defined $init{'h'} and ref $init{'h'} ne 'HASH';

    $$r{'Foo::h'} = defined $init{'h'} ? $init{'h'} : {};

      croak('Initializer for a must be array reference') 
    if defined $init{'a'} and ref $init{'a'} ne 'ARRAY';

    $$r{'Foo::a'} = defined $init{'a'} ? $init{'a'} : [];

    $$r{'Foo::s'} = defined $init{'s'} ? $init{'s'} : undef;

    bless $r, $class;
};

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