perl | Pasar parámetros complejos a una subrutina

Requisito previo: Perl | Subrutinas o Funciones

Una función o subrutina de Perl es un grupo de sentencias que juntas realizan una tarea específica. En todos los lenguajes de programación, el usuario quiere reutilizar el código. Entonces, el usuario coloca la sección de código en una función o subrutina para que no haya necesidad de volver a escribir el mismo código una y otra vez. Por esta razón, la función o subrutina se usa en todos los lenguajes de programación. Estas funciones o subrutinas pueden tomar varios tipos diferentes de estructuras de datos como parámetros. Algunos de estos se explican a continuación:

  1. Pasar listas o arreglos a una subrutina
  2. Pasar referencias a una subrutina
  3. Pasar hashes a una subrutina
  4. Pasar identificadores de archivo a una subrutina

Pasar listas o arrays a una subrutina: se puede pasar una array o una lista a la subrutina como un parámetro y se usa una variable de array @_ para aceptar el valor de la lista dentro de la subrutina o función.

Ejemplo 1: Aquí se pasa una sola lista a la subrutina y se muestran sus elementos.

#!/usr/bin/perl 
  
# Defining Subroutine
sub Display_List 
{ 
      
    # array variable to store 
    # the passed arguments 
    my @List1 = @_; 
          
    # Printing the passed list elements 
    print "Given list is @List1\n"; 
} 
  
# Driver Code
  
# passing list 
@list = (1, 2, 3, 4); 
  
# Calling Subroutine with 
# list parameter 
Display_List(@list); 
Producción:

Given list is 1 2 3 4

Ejemplo 2: Aquí se pasan dos listas a la subrutina y se muestran sus elementos.

#!/usr/bin/perl 
  
# Defining Subroutine
sub Display_List 
{ 
      
    # array variable to store 
    # the passed arguments 
    my @List3 = @_; 
          
    # Printing the passed lists' elements
    print "Given lists' elements are @List3\n"; 
} 
  
# Driver Code
  
# passing lists
@List1 = (1, 2, 3, 4); 
@List2 = (10, 20, 30, 40); 
  
# Calling Subroutine with 
# list parameters
Display_List(@List1, @List2); 
Producción:

Given lists' elements are 1 2 3 4 10 20 30 40

Ejemplo 3: Aquí se pasa un argumento escalar y una lista a la subrutina y se muestran sus elementos.

#!/usr/bin/perl 
  
# Defining Subroutine
sub Display_List 
{ 
      
    # array variable to store 
    # the passed arguments 
    my @List2 = @_; 
          
    # Printing the passed list and scalar elements
    print "List and scalar elements are @List2\n"; 
} 
  
# Driver Code
  
# passing lists
@List = (1, 2, 3, 4); 
  
# passing scalar argument 
$scalar = 100;
  
# Calling Subroutine with 
# list parameters
Display_List(@List, $scalar); 
Producción:

List and scalar elements are 1 2 3 4 100

Pasar referencias a una subrutina: las referencias también se pueden pasar a las subrutinas como un parámetro. Aquí, la referencia de la array dada se pasa a la subrutina y se devuelve el valor máximo de los elementos de la array.

Ejemplo:

#!/usr/bin/perl
use warnings;
use strict;
  
# Creating an array of some elements
my @Array = (10, 20, 30, 40, 50);
  
# Making reference of the above array
# and calling the subroutine with 
# reference of the array as the parameter
my $m = max(\@Array);
  
# Defining subroutine
sub max
{
      
    # Getting the array elements
    my $Array_ref = $_[0];
    my $k = $Array_ref->[0];
  
    # Iterating over each element of the 
    # array and finding maximum value
    for(@$Array_ref)
    {
        $k = $_ if($k < $_);
    }
    print "The max of @Array is $k\n";
}
Producción:

The max of 10 20 30 40 50 is 50

Pasar hash a una subrutina: también se puede pasar un hash a una subrutina como parámetro y se muestra su par clave- valor .

Ejemplo:

#!/usr/bin/perl 
  
# Subroutine definition 
sub Display_Hash 
{ 
      
    # Hash variable to store 
    # the passed arguments 
    my (%Hash_var) = @_; 
          
    # Displaying the passed list elements 
    foreach my $key (keys %Hash_var) 
    { 
        my $value = $Hash_var{$key}; 
        print "$key : $value\n"; 
    } 
} 
  
# Driver Code
  
# defining hash 
%Hash = ('Company' => 'GeeksforGeeks', 
         'Location' => 'Noida'); 
  
# calling Subroutine with hash parameter 
Display_Hash(%Hash); 
Producción:

Company : GeeksforGeeks
Location : Noida

Pasar identificadores de archivo a una subrutina: para crear un archivo o acceder al contenido del archivo, se necesita un identificador de archivo que no es más que una estructura que se usa junto con los operadores para acceder al archivo en un modo determinado, como lectura, escritura, adición, etc. FileHandles también se puede pasar a una subrutina como parámetro para realizar varias operaciones en archivos.
En el siguiente ejemplo, se pasa un identificador de archivo a una subrutina: –
Ejemplo:

#!/usr/bin/perl 
     
sub printem
{
    my $file = shift;
   
    while (<$file>) {
         print;
    }
}
   
open(fh, "Hello.txt") or die "File '$filename' can't be opened";
   
printem *fh;
Producción:

Publicación traducida automáticamente

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