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.
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
4 Wed Mar 27 07:01:56 2019 7 The number of elements are: 4
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();
3 Sun Mar 17 06:12:53 2019
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;
3
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"; }
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"; }
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.
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