Paquete UNIVERSAL en Programación Perl

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *