ProgramaciónDesarrollador Backend Perl

¿Cuáles son las formas de interpolación de variables y expresiones en cadenas de Perl, y qué se debe tener en cuenta al usarlas?

Supere entrevistas con el asistente de IA Hintsage

Respuesta

Perl admite dos formas de literales de cadena: comillas dobles (“) y comillas simples (’). Dentro de las cadenas con comillas dobles, ocurre la interpolación: las variables y caracteres especiales como , \t se reemplazan por sus valores. En las comillas simples, no hay interpolación: el contenido se toma literalmente.

Ejemplo:

my $name = "Alex"; print "Hola, $name! "; # Hola, Alex! print 'Hola, $name! '; # Hola, $name! # La interpolación de expresiones es posible a través de llaves: my $i = 10; print "i + 5 = @{[$i + 5]} "; # i + 5 = 15

Particularidades y sutilezas:

  • No olvides escapar las variables si después de ellas siguen letras, de lo contrario Perl pensará que es parte del nombre de la variable.
  • Para expresiones complejas, usa @{[ ... ]} dentro de la cadena con interpolación: es una forma segura de insertar el resultado de una expresión en la cadena.

Pregunta trampa

¿En qué casos las variables dentro de una cadena en comillas dobles no se interpolarán?

Respuesta: Cuando la variable está escapada (\$var), dentro de comillas simples, o si se utiliza la sintaxis con llaves, pero no de manera apropiada, o si el nombre de la variable no está delimitado por llaves y se produce una "concatenación" del nombre de la variable con letras.

my $world = 'tierra'; print "Hola, $worlds! "; # ERROR: La variable $worlds no existe, no $world + letra s

Ejemplos de errores reales por desconocer las sutilezas del tema


Historia

En un gran proyecto, para el registro se usaron cadenas con variables:

my $file = '/tmp/data'; print LOG 'File: $file

';


Se esperaba ver la ruta del archivo, pero en el log se almacenaba el texto literal `$file`, ya que se usaban comillas simples. El problema se notó después de ponerlo en producción.

Historia

Un desarrollador insertó una variable dentro de una cadena sin llaves:

my $user = "bob"; print "Usuario: $user21

";


Se esperaba que se mostrara `bob21`, pero el intérprete comenzó a buscar la variable `$user21` (que no existía). Esto causó un valor vacío en los informes.

Historia

Para mostrar el resultado de una expresión dentro de una cadena se utilizó el siguiente código:

my $a = 3; print "Suma: $a+5

"; # Se esperaba: 'Suma: 8', se recibió: 'Suma: 3+5'


De hecho, la interpolación solo considera variables, las expresiones se insertan literalmente. Se debe trabajar a través de @{[ ... ]}.