Interpolación en Cadenas de Comillas Dobles

Las cadenas con comillas dobles permiten la interpolación de variables. Esto quiere decir que si en la cadena escribes el nombre de una variable escalar, se sustituirá por su valor.

$a = 1;
print "$a"; # imprime un 1
print '$a'; # imprime $a

El nombre de la variable es el identificador mas largo que sigue al $. Esto puede ser un problema si lo que quieres es imprimir el valor de la variable seguido de letras. La solución es envolver el identificador de la variable entre llaves. Vea el siguiente ejemplo:

pp2@nereida:~/doc/2005_2006$ perl -wde 0
main::(-e:1):   0
  DB<1> $que = "chuleta"; $n = 3
  DB<2> print "Antonio comió $n $ques.\n"
Use of uninitialized value in concatenation (.) or string at (eval 6)\
   [/usr/share/perl/5.8/perl5db.pl:628] line 2.
 at (eval 6)[/usr/share/perl/5.8/perl5db.pl:628] line 2
        eval '($@, $!, $^E, $,, $/, $\\, $^W) = @saved;package main; $^D = $^D | $DB::db_stop;
print "Antonio comió $n $ques.\\n";

;' called at /usr/share/perl/5.8/perl5db.pl line 628
        DB::eval called at /usr/share/perl/5.8/perl5db.pl line 3410
        DB::DB called at -e line 1
Antonio comió 3 .
El resultado es un mensaje de advertencia del depurador: La variable $ques no esta incializada. La salida es:

Antonio comió 3 .

Una variable no inicializada contiene el valor especial undef . Cuando el valor undef se evalúa en un contexto de cadena se evalúa como una cadena vacía.

Mediante el uso de llaves logramos la respuesta correcta:

  DB<3> print "Antonio comió $n ${que}s.\n"
Antonio comió 3 chuletas.
Otra solución es usar el operador de concatenación (denotado mediante un punto "."):
  DB<4> print "Antonio comió $n $que"."s.\n"
Antonio comió 3 chuletas.

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19