perl | Función AUTOCARGA

En Perl , Autoload es una rutina o un mecanismo que se define en un paquete. Es simple de usar. Se aplica siempre que haya una rutina indefinida llamada dentro del paquete.
Sin Autoload, las rutinas indefinidas producirán un error mientras se ejecuta el programa. Para localizar un paquete o paquetes se llama a una subrutina Autoload con argumentos de las subrutinas indefinidas.

Sintaxis: para usar la carga automática, simplemente coloque esta sintaxis en su programa Perl: –

use vars '$AUTOLOAD';

Parámetros:
En $Autoload el nombre de la subrutina original aparece en la variable global del paquete que llama a una función no definida.
En las versiones más recientes de Perl, la sintaxis es

our $AUTOLOAD;

Ejemplo:
aquí un vistazo a un ejemplo de Perl para llamar a una función indefinida

#!/usr/bin/perl
use strict;
use warnings;
  
print "Geeks For Geeks\n";
  
report_protein_function("one", "two");
  
print "A computer portal for every geek\n";

Producción:

output 1

Como puede ver, se ha producido un error en el programa. Ahora usaremos el método de carga automática en el programa

#!/usr/bin/perl
use strict;
use warnings;
use vars '$AUTOLOAD';
  
print "Geeks For Geeks\n";
  
report_protein_function("one", "two");
  
print "A computer portal for every geek\n";
  
# AUTOLOAD() Function
sub AUTOLOAD 
{
    print "AUTOLOAD is set to $AUTOLOAD\n";
    print "with arguments ", "@_\n";
}

Producción:
output 2

Métodos de Redespacho en AUTOLOAD()

La AUTOLOAD()función nos ayuda a extraer el nombre de un paquete indefinido. Esto hace que obtenga una dirección de datos de objetos proxy de un escalar referenciado.
La clase Proxy escribe el registro y luego lo vuelve a enviar al objeto de destino.
Con NEXTél, es posible implementar un AUTOLOADmétodo que solo maneje llamadas de método del formulario get_y set_sea efectivamente invisible para cualquier otra solicitud de método.

La implementación se vería así:

sub AUTOLOAD
{
    $AUTOLOAD =~ s/.*:://;
    if ($AUTOLOAD =~ /^get_\w+$/) 
    {
        # Handle getting...
    }
    elsif ($AUTOLOAD =~ /^set_\w+$/) 
    {
        # Handle setting...
    }
    else 
    {
        # Decline to handle,
        # passing the request on to someone else...
        shift->${\"NEXT::$AUTOLOAD"}(@_);
    }
}

Generación de código en AUTOLOAD()

Redispachar los métodos es fácil de hacer pero es ineficiente. Cada llamada de método en el proxy termina fallando en el envío normal en AUTOLOAD().
Esto hace que el método de carga automática anterior limite el nombre de la subrutina no definida. Esto hace que el código se invoque y vaya directamente al resultado.
Este método es más fácil de limpiar y maneja el comportamiento en AUTOLOAD().

Inconvenientes de AUTOLOAD()

Aquí se enumeran algunos de los inconvenientes de autoload()

  1. Aunque este método es útil, es difícil usarlo correctamente ya que no brinda información adecuada sobre las capacidades del objeto y la clase.
  2. Retrasa la carga de subrutinas.
  3. Carga automática La velocidad de ejecución es muy cargada

Publicación traducida automáticamente

Artículo escrito por pranavduggal221999 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 *