ProgramaciónDesarrollador Perl

Describe las características del trabajo con variables en Perl. ¿En qué se diferencian los scalars, arrays y hashes? Proporcione ejemplos de uso de cada tipo.

Supere entrevistas con el asistente de IA Hintsage

Respuesta

En Perl, las variables se dividen en scalars ($), arrays (@) y hashes (%):

  • Scalars ($variable) – almacenan un solo valor (cadena, número):

    my $name = "Ivan"; my $age = 30;
  • Arrays (@array) – conjunto de elementos ordenados (indexados por números):

    my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
  • Hashes (%hash) – conjunto de pares clave-valor (arreglo asociativo):

    my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000

Tenga en cuenta que para acceder a un elemento se utiliza un símbolo específico dependiendo del tipo de variable:

  • $array[0] — elemento del array
  • $hash{"key"} — valor del hash por clave

Pregunta capciosa

¿En qué se diferencian las expresiones @array[1,2] y $array[1,2]?

Respuesta:

  • @array[1,2] — proporciona una lista con varios elementos del array (rebanada).
  • $array[1,2] — incorrecto, genera un error. Para acceder a varios elementos del array, se utiliza solo la rebanada @array[...].

Ejemplo:

my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)

Ejemplos de errores reales debido a la falta de conocimiento de los matices del tema


Historia

En un proyecto de registro, un programador accedió a un elemento del hash a través de @colors{"red"}. Como resultado, obtenía un error aleatorio en lugar del valor del hash, porque para un valor único se necesita $, no @.


Historia

En un servicio, al iterar sobre los índices del array, se olvidaron de usar la forma correcta — en lugar de $array[$i] utilizaron @array$i, lo que causaba advertencias y resultados incorrectos.


Historia

En un proyecto de API, describieron una función que tomaba un array como $args, pero al llamarla se pasaba un array sin scalar: func(@list). Resultó que de esta manera los elementos del array se "desplegaban" en una lista, y la función no funcionaba como esperaban. Era correcto aceptar el array como @args.