Subsecciones

Comillas Dobles

En las comillas dobles el carácter de escape permite especificar caracteres de control.

Existe un buen número de secuencias de escape. He aqui algunas:


Tabla 1.1: Secuencias de Escape en Cadenas de Doble Comilla
Código Significado
\a Alarma (beep!)
\b Retroceso
\n Nueva línea
\r Retorno de carro
\t Tabulador
\f Formfeed
\e Escape
\007 Cualquier carácter ASCII en octal
\x7f Cualquier carácter ASCII en hexadecimal
\cC Cualquier carácter de control. Aqui CTRL-C


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.

Convirtiendo en Uppercase y Lowercase

Existen también secuencias de escape como \u \U \l \L \E que cambian de mayúsculas a minúsculas y viceversa:

$p = "pescailla"; $f = "faraona";
print "El \U$p\E  y la \u$f\n";    # El PESCAILLA y la Faraona

Los operadores \u (uppercase) y \l (lowercase) cambian el siguiente carácter a mayúscula y minúscula respectivamente. Los operadores \U y \L cambian toda la secuencia hasta la aparición del operador \E.

lhp@nereida:~/Lperl/doc$ perl -de 0
main::(-e:1):   0
DB<1> p "Hola\cL\cMJuan\cL\cM"
Hola
Juan

DB<2> p "esta es una \Ugran\E palabra"
esta es una GRAN palabra

Los operadores q y qq

En Perl las diversas formas de entrecomillados son operadores (de la misma manera que la concatenación, la suma o el producto).

Es posible usar los operadores q y qq para entrecomillar cadenas. El operador q convierte su argumento en una cadena de comillas simples. El operador qq convierte su argumento en una cadena de comillas dobles.

Así:

print q*El 'morao' de \*estrellas\** # El 'morao' de *estrellas*
Es posible usar delimitadores ``pareja'' como {}, [], (), etc. En tal caso, Perl lleva la cuenta del anidamiento de la pareja:
$a = 4;
print qq<No me <<cites>> mas de $a veces!>; #No me <<cites>> mas de 4 veces!

Para sabe mas sobre este tipo de operadores consulte la sección Quote and Quote-like Operators de perlop (escriba perldoc perlop en la consola).

Casiano Rodríguez León
2009-10-04