En Perl , hay valores de diferentes tipos como strings, enteros, números racionales y más. La coerción es responsable de convertir un tipo de datos u objeto en otro, detrás de escena donde mágicamente obtenemos lo que queremos. Generalmente se refiere a «conversión de tipo implícita», que también es una de las formas de cambiar una entidad de un tipo de datos a otro.
La forma más común de coerción es la sobrecarga pragma y su sobrecarga de strings en la programación Perl. En este caso, nuestro objeto se convierte automáticamente en una string (dentro de Perl mismo).
El tipo de coerción destinado a la coerción de alto orden es Params::Coerce, que se utiliza principalmente en parámetros de subrutinas y métodos.
Tipos de coacciones
Los tipos de coerción se explican a continuación:
- Coerción booleana: la coerción booleana es útil para probar la veracidad del valor al igual que en una condición si o mientras. Todos los 0 numéricos, undef, la string vacía y la string ‘0’ se evalúan como valores falsos. Todos los demás valores, incluidas las strings que son numéricamente iguales a cero (como ‘0.0’, ‘0e’ y ‘0 pero verdadero’), se evalúan como valores verdaderos.
Cuando un escalar consta de componentes de string y numéricos, Perl verifica preferiblemente el componente de string para ver si es booleano. ‘0 pero verdadero’ se evalúa como cero numéricamente, pero no es una string vacía, por lo que se evalúa como un valor verdadero en un contexto booleano.Ejemplo:
say ?^True; # Falsesay ?^''; # Truesay ?^0; # Truesay ?^42; # False
(El operador de prefijo ? es el operador booleano de coerción. Convierte su operando en un valor booleano).
- Coerción de strings: la coerción de strings entra en acción cuando usamos operadores de strings como comparaciones (eq y cmp), concatenación, división, substr y expresiones regulares, y también cuando usamos un valor o una expresión como clave hash. El valor indefinido luego se convierte en una string vacía pero produce una advertencia de «uso de valor no inicializado». Los números se convierten en strings que contienen sus valores. (stringify = para devolver una string)
Ejemplo:
use
strict;
use
warnings;
my
$x
=
"4T"
;
# string
my
$y
= 3;
# integer
my
$z
=
$x
.
$y
;
print
$z
;
# coerced
Producción:4T3
- Coerción numérica: la coerción numérica ocurre cuando usamos un operador de comparación numérica como == y <=>, mientras realizamos operaciones matemáticas o cuando usamos una expresión o un valor como una array o índice de lista. El valor indefinido luego se numifica a cero y nos da una advertencia de «Uso de valor no inicializado». Las strings que no comienzan con ninguna parte numérica se numeran a cero y nos dan una advertencia de «El argumento no es numérico». Y los que comienzan con el carácter permitido en los literales numéricos se numeran a los valores especificados y no producen ninguna advertencia. (numificar = para devolver un número).
También hay una función en la función de Perl que utiliza las mismas reglas de análisis que la gramática de Perl para extraer un número de una string que es look_like_number() que se incluye en el módulo principal.Escalar::Util.Ejemplo:
my
$a
=
"23B"
;
$a
+=0;
# string part has been removed automatically.
print
$a
;
Producción:23
- Coerción de referencia: cuando usamos una operación de desreferenciación en una no referencia, convierte un valor en una referencia. Este proceso se conoce como Autovivificación. Este proceso resulta útil al manipular estructuras de datos anidadas.
Ejemplo:my
%users
;
$users
{John}{id} = 128;
$users
{Thomas}{id} = 129;
Explicación: Como podemos ver en esto, el hash no contiene valores para John y Thomas, pero Perl ha creado útiles referencias de hash para ellos, asignando a cada uno de ellos un par clave/valor ingresado en id.
- Coerciones en caché: la representación interna de valores en Perl almacena tanto strings como valores numéricos. Al igual que cuando enstringmos un valor, no reemplaza el valor numérico sino que agrega un valor enstringdo a la representación interna que luego consta de ambos componentes. De manera similar, cuando numeramos un valor de string, rellena el valor numérico y deja intacto el componente de string.
Por ejemplo: Ciertos operadores de Perl a menudo prefieren usar un valor sobre el otro (al igual que las comprobaciones booleanas prefieren strings). Si hay un valor que tiene una representación en caché en una forma que no esperamos, confiar en una conversión implícita puede producir algunos resultados sorprendentes. Saber cómo ocurre esto podría ayudarnos a diagnosticar alguna situación extraña.
Dualvars
Perl tiene una naturaleza de múltiples componentes que está disponible para el usuario en forma de dualvars. La función dualvar() es proporcionada por el módulo principal Scalar::Util, que nos permite eludir la coerción de Perl y manipular la string y los componentes numéricos de un valor por separado.
use Scalar::Util qw(blessed dualvar set_prototype); $foo = dualvar 10, "Geeksfor"; $num = $foo + 2; $str = $foo . " Geeks"; print "$num\n"; print $str;
12 Geeksfor Geeks
Publicación traducida automáticamente
Artículo escrito por vishalraina y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA