perl | Sensibilidad de contexto escalar

Introducción:
en Perl , las llamadas a funciones, los términos y las declaraciones tienen explicaciones inconsistentes que se basan en su Contexto. Hay dos contextos cruciales en Perl, a saber, contexto de lista y contexto escalar. En un contexto de lista, Perl proporciona la lista de elementos. Pero en un contexto escalar, devuelve la cantidad de elementos en la array. Cuando un operador funciona en escalares, se denomina contexto escalar.
Nota:

  • Siempre que asigne algo a una variable escalar, siempre dará contexto escalar.
  • En este Contexto, la presunción es obtener un valor único.
  • Una array, si se asigna a la variable escalar, devolverá su tamaño.
Crear un contexto escalar

 
El contexto escalar se puede generar con el uso de variables escalares, operadores numéricos y muchos más.

  • Asignación a una variable Escalar:
    Ejemplo:
    $x = @z;
    $x = localtime();
    $x = Scalar;

    Aquí, localtime() muestra la hora en un formato legible por humanos, mientras que en List Context esta función muestra una representación numérica de la hora.

  • Asignación a un solo elemento de una array:
    Ejemplo:
    $a[2] = Scalar;

    Cada elemento de una array es individualmente un escalar. Entonces, la asignación a ellos genera un contexto escalar.

  • Operadores numéricos creando contexto escalar:
    Ejemplo:
    3 + Scalar;
    Scalar + 3;

    Un operador numérico puede generar contexto escalar en cualquiera de sus lados.

  • Concatenación creando Contexto Escalar:
    Ejemplo:
    "GFG" . Scalar;
    Scalar . "GFG"

    Del ejemplo anterior, está claro que la concatenación puede generar un contexto escalar en ambos lados de sí mismo.

Ejemplo:

#!/usr/bin/perl 
# Perl program of creating Scalar Context 
  
# array of elements 
my @CS = ('geeks', 'for', 'geeks', 'articles'); 
              
# Assignment to a Scalar variable
my $x = @CS;         
      
# Assignment of a function 
# to a Scalar variable 
# Note: Time displayed here
# will be the GMT
my $y = localtime(); 
  
# Numerical operator creating
# Scalar Context
my $z = 3 + @CS;
              
# Displays number of elements
# in an Array
print "$x\n";     
  
# Displays time stored in array 
# in human readable format
print "$y\n";
  
# Displays sum of a number
# and Scalar
print "$z\n";
  
# Concatenation creating 
# Scalar Context
print "The number of elements are: " . @CS
Producción:

4
Wed Mar 27 07:01:56 2019
7
The number of elements are: 4
Forzar contexto escalar

 
Se debe exigir forzar el contexto escalar cuando Perl supone una lista. Entonces, en ese caso, puede utilizar la función scalar() que genera Scalar Context ya que esta función informa a Perl para impartir Scalar Context para sus parámetros.
Ejemplo:

#!/usr/bin/perl 
# Perl program of Forcing Scalar Context 
  
# array of elements 
my @x = ('geeks', 'for', 'geeks'); 
  
# Forcing Scalar context to display
# number of elements in an Array
print scalar @x;
print "\n";
  
# Displaying time in human readable 
# format by forcing Scalar Context
print scalar localtime();         
Producción:

3
Sun Mar 17 06:12:53 2019
Arrays en contexto escalar

 
Para provocar un contexto escalar usando una array, se requiere asignar una array a una variable escalar.
Ejemplo:

#!/usr/bin/perl 
# Perl program of Arrays in Scalar Context 
  
# array of elements 
my @x = ('geeks', 'for', 'geeks'); 
  
# Assignment of an Array to
# a Scalar variable
my $y =  @x;
  
# Displays number of elements in
# an Array
print $y;         
Producción:

3
Uso de sentencia if en contexto escalar

 
Cuando la sección de condición de la declaración if presupone un valor único, entonces ese es un contexto escalar. En el programa a continuación, la declaración if contiene una array, en contexto escalar, la array devuelve la cantidad de elementos que contiene. Entonces, si la array está vacía, devolverá 0, por lo tanto, la declaración if no se ejecutará si la array que se le pasó como contexto escalar está vacía.
Programa 1:

#!/usr/bin/perl 
  
# Program of if-statement in Scalar Context 
use strict; 
use warnings; 
use 5.010; 
  
# Array with no elements
my @w = (); 
  
# Statement within 'if' will be executed 
# only if the array is not empty 
if (@w) 
{ 
    print "Geeks"; 
} 
Producción:

No Output

Aquí, no se imprime nada ya que el Array indicado está vacío. Por lo tanto, el código no muestra el contenido de la instrucción if.

Programa 2:

#!/usr/bin/perl 
  
# Program of if-statement in Scalar Context 
use strict; 
use warnings; 
use 5.010; 
  
# An Array of elements
my @w = ('G', 'f', 'G'); 
  
# Statement within 'if' will be executed 
# only if the array is not empty 
if (@w) 
{ 
    print "There are some elements in the Array"; 
} 
Producción:

There are some elements in the Array

Aquí, la array mencionada anteriormente no está vacía, por lo que se imprime el contenido de la declaración if.
 

Lectura en Contexto ESCALAR

 
Para colocar el operador de línea de lectura (es decir, <STDIN> ) en contexto escalar, se requiere designar este operador a una variable escalar.
Ejemplo:

#!/usr/bin/perl 
# Program to Read input from user
use strict; 
use 5.010; 
    
# Asking the user to provide input  
print "Enter your name:\n"; 
    
# Getting input from user  
my $y = <STDIN>; 
  
# Printing the required output 
print "My name is $y\n";

Salida:

el programa anterior acepta la entrada del usuario con el uso de <STDIN> y la almacena en la variable escalar. Además, use esa variable escalar para imprimir la entrada proporcionada por el usuario.

Publicación traducida automáticamente

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