Ejercicios

Contextos

Elemento o Trozo

¿Que es @a[1]? ¿Un elemento de un array o un trozo (slice) de un array?

Asignaciones, Trozos y Contextos

¿Que efecto tiene el siguiente código?:

@text = (1, 2, 3, 4, 5);
@text[@text] = 0;
¿En que contexto se interpreta el array @text que aparece dentro del corchete? ¿Escalar o lista?

Respuesta:

El array text entre corchetes es interpretado en un contexto de lista, pues no dice $text[@text], dice @text[@text]. El resultado es un trozo con 5 elementos. Por tanto dice: @text[(1, 2, 3, 4, 5)] = 0. Asi pues, text[0] permanece no modificado y es 1, text[1] es igualado a 0 y los restantes miembros quedan undef ya que la parte derecha es una lista que contiene un sólo elemento.

lhp@nereida:~/Lperl/src$ perl -wde 0
main::(-e:1):   0
  DB<1> @text = (1, 2, 3, 4, 5)
  DB<2> @text[@text] = 0
  DB<3> x @text
0  1
1  0
2  undef
3  undef
4  undef
5  undef
  DB<4> @text = (1, 2, 3, 4, 5)
  DB<5> $text[@text] = 0
  DB<6> x @text
0  1
1  2
2  3
3  4
4  5
5  0

La Lectura en un Contexto de Lista

En un contexto de lista el operador <STDIN> lee todas las líneas restantes en la entrada y las almacena en una lista. Por ejemplo:

lhp@nereida:~/Lperl/src$ perl -wde 0
main::(-e:1):   0
  DB<1> !!cat prueba1.txt
12
23
3
4
2
1
  DB<2> open $f, 'prueba1.txt'
  DB<3> @x = <$f>
  DB<4> chomp(@x)
  DB<5> x @x[-3..-1]
0  4
1  2
2  1
  DB<6> $/ = '3'
  DB<7> open $f, 'prueba1.txt'
  DB<8> @x = <$f>
  DB<9> chomp(@x)
  DB<10> x @x
0  '12
2'
1  '
'
2  '
4
2
1
'
Leemos y almacenamos las líneas en el array @x. La orden chomp Elimina todos los separadores de registro de todas las líneas en la lista.

Ejercicio 1.13.5   ¿Porqué han desaparecido los 3 en la salida de la línea 10?

grep

Explique la interpretación que hace Perl del siguiente fragmento de código. Consulte 1.13.2 y el manual de Perl para entender el uso de la función grep. Lea el capítulo 3 para saber mas sobre expresiones regulares:

@a = grep /\bjose\b/, <>;

En la expresión regular \b es un ancla: casa con una frontera (boundary) de palabra. Asi pues, josefa y quejose no casan con /\bjose\b/.



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