UNIVERSAL es un paquete incorporado en Perl 5. También se puede considerar como una clase base en la que las clases derivadas pueden heredar o anular implícitamente. Ofrece varios métodos predeterminados como isa()
, y . La clase UNIVERSAL no se puede mostrar en la variable @ISA del paquete . También se pueden agregar otros métodos a la clase UNIVERSAL a través del código Perl o XS. No es necesario incluir declaraciones ‘ use UNIVERSAL ‘ en el código para hacer uso de los métodos mencionados anteriormente en el programa.can()
VERSION()
DOES()
Versión() Método
Devuelve el valor de la variable $VERSION de la clase o paquete adecuado. Este método puede tomar un número de versión como parámetro opcional. En caso de que la $VERSIÓN consultada no sea mayor o igual que el parámetro, este método genera una excepción.
Ejemplo:
Consideremos un módulo Dog de la versión 2.0
use 5.010; package Dog 2.0; use strict; use warnings; # constructor sub new { # the package name 'Dog' is in the default array @_ # shift will take package name 'Dog' # and assign it to variable 'class' my $class = shift; # object my $self = { 'name' => shift, 'breed' => shift }; # blessing self to be object in class bless $self, $class; # returning object from constructor return $self; } my $d = new Dog('Sammy','Pug'); say Dog->VERSION(); say $d->VERSION(); say $d->VERSION(0.0); say $d->VERSION(1.5); say $d->VERSION(3.0); # EXCEPTION
Producción:
2.0 2.0 2.0 2.0 Dog version 3 required--this is only version 2.0 at /home/4c09f6973dc56e8a558b8be499a040bb.pl line 32.
Método HACE()
El DOES()
método verifica si una clase o un objeto realiza un rol particular o no. Cuando el nombre de la función se pasa a este método y si realiza la función especificada, devuelve verdadero (1), de lo contrario, devuelve falso (0). El rol se puede considerar como una colección de comportamientos mostrados por una clase.
Ejemplo:
Consideremos módulos/clases Perro y animal
use 5.010; package Animal; sub new { my $type = shift; my $self = {}; return bless $self, $type; } sub MyMethod { print "Animal::MyMethod called!\n"; } # class Dog package Dog; # class Dog inherits from class Animal @ISA = qw(Animal); sub new { my $type = shift; my $self = Animal->new; return bless $self, $type; } sub MyMethod { my $self = shift; $self->SUPER::MyMethod(); } # Driver Code package main; $myObject = Animal->new(); $myObject2 = Dog->new(); # Basic DOES() usage say Dog->DOES('Animal'); say $myObject->DOES('Animal'); say $myObject2->DOES('Dog');
Producción:
1 1 1
Método can()
El can()
método acepta el nombre del método como una string. Devuelve una referencia a la función existente que implementa este método o de lo contrario devuelve un valor falso. Este método se puede llamar en una clase, un objeto o un paquete. Si can($classname) devuelve verdadero, significa que existe una clase con el nombre $classname. Este método solo verifica la existencia de una clase y no comenta sobre su usabilidad.
Ejemplo:
Consideremos una clase Perro con un método llamado ladrar, se puede hacer una referencia a este método de la siguiente manera:
use 5.010; use strict; use warnings; { package Animal; sub new { bless({}, $_[0]) } } { package Dog; our @ISA = qw(Animal); sub dog { 1 } } # objects my $dog = Dog->new; my $animal = Animal->new; # Basic can() usage say $animal->can('dog'); # false say $dog->can('dog'); # true
Producción:
Use of uninitialized value in say at /home/fdfdd52de0b7348de191b3d9be3cb44f.pl line 11. CODE(0x1fc3168)
can()
también se puede usar para verificar si un paquete ha implementado con éxito una función o método específico o no.
Método isa()
El isa()
método acepta el nombre de una clase o el nombre de un tipo incorporado como una string. Se puede invocar en un método de clase, un método de instancia o un objeto. Devuelve un verdadero si una clase u objeto especificado se deriva del paquete, o si es una referencia bendecida al tipo dado.
Ejemplo:
supongamos que $perro es un objeto (una referencia hash bendecida en la clase Perro, que hereda de la clase Animal):
use 5.010; use strict; use warnings; { package Animal; sub new { bless({}, $_[0]) } } { package Dog; our @ISA = qw(Animal); sub dog { 1 } } # objects my $animal = Animal->new; my $dog = Dog->new; # basic isa() usage say $animal->isa('Animal'); # true say $dog->isa('Animal'); # true
Producción:
1 1
Publicación traducida automáticamente
Artículo escrito por manandeep1610 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA