Existe un buen número de secuencias de escape. He aqui algunas:
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.
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
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