0
Programación en Perl        Arrays
ArraysLos escalares sirven para almacenar “una cosade algo”Los arrays son una forma de almacenar “muchascosas de algo”Defin...
ArraysLos arrays/listas están ordenados, es decir, tienenuna determinada secuencia.Los array/listas están indexados por en...
Arrays: accediendo a sus          elementos1.$marcas[0] = "Ford";2.$marcas[1] = "Mercedes";3.$marcas[2] = "Kia";       El ...
Arrays: accediendo a sus          elementos1.$marcas[0] = "Ford";2.$marcas[1] = "Mercedes";3.$marcas[2] = "Kia";       El ...
Arrays       ¿qué pasa si nos salimos de los límites del       array?1.$marcas[0]     =   "Ford";2.$marcas[1]     =   "Mer...
Arrays       ¿qué pasa si nos salimos de los límites del       array?1.$marcas[0]     =   "Ford";2.$marcas[1]     =   "Mer...
Arrays: último índice
Arrays: último índice1.$indice = $#marcas; #índice del último elemento, 1002.$elementos = $indice + 1; #hay 101 elementos3...
Arrays: último índice1.$indice = $#marcas; #índice del último elemento, 1002.$elementos = $indice + 1; #hay 101 elementos3...
Arrays: literales de lista (1, 3, 5, 7) (“nombre”, 3, 5.5, “López”) () #Lista vacía (1..100) # lista de 100 enteros usando...
Arrays: qwEn lugar de(‘maría’, ‘mariano’, ‘luis’, ‘rodrigo’, ‘ana’)podemos hacer lo siguienteqw( maría mariano luis rodrig...
Arrays: qwOtra forma de poner la lista esqw(   maría   mariano   luis   rodrigo   ana)
Arrays: qwPodemos usar cualquier delimitadorqw! maría mariano luis rodrigo ana !qw# maría mariano luis rodrigo ana #Podemo...
Arrays: asignación de        listasAsignar los valores de una lista a un conjunto devariables:($nombre, $apellido1, $apell...
Arrays: asignación de              listas¿Qué pasa si el número de elementos no coincide?($nombre, $apellido1) = qw( luis ...
Arrays: asignación de        listas
Arrays: asignación de        listas¿y si queremos asignar la lista a un array?($users[0], $users[1], $users[2]) = qw/ pila...
Arrays: asignación de        listas¿y si queremos asignar la lista a un array?($users[0], $users[1], $users[2]) = qw/ pila...
Arrays: asignación de        listasMás asignaciones de lista a array  @usuarios = qw/ user1 user2 user3 /  @enteros = (1.....
Arrays: asignación de        listasMuy importante:@todos = (@usuarios, @administradores)no es un array de arrays, es la “c...
Arrays: funciones y     operadorespop: quita un elemento del array por el finalpush: añade un elemento al array por el final...
Arrays: funciones y     operadoressplice: sirve para obtener “rebanar” de un array
Arrays: funciones y    operadores
Arrays: funciones y             operadores1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 2...
Arrays: funciones y             operadores1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 2...
Arrays: funciones y             operadores1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 2...
Arrays: interpolación en        cadenas
Arrays: interpolación en            cadenas1.@picapiedra = qw( pablo pedro betty wilma dino );2.say “Los picapiedra son @p...
Arrays: interpolación en            cadenas1.@picapiedra = qw( pablo pedro betty wilma dino );2.say “Los picapiedra son @p...
Arrays: interpolación en            cadenas1.@picapiedra = qw( pablo pedro betty wilma dino );2.say “mi email es pedro@pic...
Arrays: interpolación en            cadenas1.@datos = qw( pablo pedro betty wilma dino );2.$datos = “ESCALAR”3.print "$dat...
Arrays: foreach       Estructura de control que itera sobre todos los       elementos del array1.@datos = qw( pablo pedro ...
Arrays: foreachLa variable $dato NO es una copia del elementodel array, por lo que si se modifica en el bucle,se modifica el...
Arrays: foreachLa variable $dato NO es una copia del elementodel array, por lo que si se modifica en el bucle,se modifica el...
Arrays: foreach1.#Vamos a hacerlo más corto. No necesitamos el array datos2.foreach $dato ( qw( pablo pedro betty wilma di...
Arrays: sort y reversesort: Devuelve un array con los elementosordenador por orden alfabético  @ordenado = sort (@array)  ...
Arrays: each       A partir de la versión 5.12 de perl, es posible       usar la función each con arrays (antes sólo se   ...
Arrays: for1.@datos = qw( pablo pedro betty wilma dino );2.for($i = 0; $i < $#datos; $i++ ) {3.        say "$i: $datos[$i]...
LO MÁS IMPORTANTE    DEL CURSO:
LO MÁS IMPORTANTE    DEL CURSO:LOS CONTEXTOS DE EJECUCIÓN
Contextos
ContextosQue sea importante no quiere decir que sea difícil. Veamoslo
ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas difere...
ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas difere...
ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas difere...
ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas difere...
ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas difere...
ContextosYa hemos visto un ejemplo de contextos:  2*3=6  2 x 3 = 222El operador define el contexto de la expresióny, en fun...
ContextosCuando perl analiza una expresión siempre espera unescalar o una lista.Una expresión siempre devuelve el valor ap...
Contextos1.@datos = qw( pablo pedro betty wilma dino );2.$ordenados = sort @datos # contexto lista: sort espera           ...
Contextos¿Qué ocurre si intentamos utilizar una expresión quegenera una lista en un contexto escalar?   Por ejemplo: rever...
Contextos¿Qué ocurre si intentamos utilizar una expresión quegenera una lista en un contexto escalar?   Por ejemplo: rever...
Contextos¿Y porqué devuelve eso y no otra cosa?Devuelve eso porque el sentido común de LarryWall determinó en su día que e...
Contextos      ¿Qué ocurre si intentamos utilizar una      expresión que genera un escalar en un      contexto de lista?  ...
Contextos       Cuidado con la siguiente expresión:1.@array = undef; # Se genera un array de un elemento undef            ...
Contextos       A veces podemos necesitar forzar un contexto       escalar donde perl espera una lista1.@picapiedra = qw( ...
Contextos: <STDIN>       En contexto de lista, este operador devuelve       todas las líneas de entrada en un array1.@line...
Contextos: <STDIN>       Si la entrada viene de un fichero, se lee todo el       fichero en memoria.       Cuando se lee el ...
Contextos: <STDIN>       Si la entrada viene de un fichero, se lee todo el       fichero en memoria.       Cuando se lee el ...
Ejercicios1. Escribe un programa que pida al usuario una lista de cadenas en líneas separadas y las   imprima en orden inv...
Perl2 arrays
Upcoming SlideShare
Loading in...5
×

Perl2 arrays

365

Published on

Diapositivas utilizadas en el curso de introducción a perl.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
365
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • Recordar:\n- Cada elemento de la lista o del array es un escalar, esto es importante para ver c&amp;#xF3;mo trabajamos con los elementos dentro de un programa\n\n
  • En realidad no pueden tener cualquier tama&amp;#xF1;o ya que el &amp;#xED;ndice es un entero con signo. Eso signfica que s&amp;#xF3;lo pueden tener 2,147,483,647\n\nEjercicio: escribir un script en perl que imprima este n&amp;#xFA;mero\nperl -e &apos;print 0x7FFFFFFF.&quot;\\n&quot;&apos;\n
  • Poner el ejemplo arrays1.pl\n\n#!/opt/local/bin/perl\n# Este gui&amp;#xF3;n muestra c&amp;#xF3;mo podemos tener un escalar y un array con el mismo nombre\nuse 5.010;\nuse utf8;\nuse warnings;\n\n$marcas = &quot;ESCALAR marcas&quot;;\n\n$marcas[0]=&quot;Ford&quot;;\n$marcas[1]=&quot;Mercedes&quot;;\n$marcas[2]=&quot;Kia&quot;;\n\n\nsay $marcas;\nsay &quot;Mi coche es un $marcas[1]&quot;;\n\n#Los &amp;#xED;ndices son enteros, por lo que podemos usar escalares para acceder a ellos\n$indice=2;\nsay &quot;Mi coche es un $marcas[$indice]&quot;;\n\n#Aunque esta l&amp;#xED;nea muestra un warning, es\nsay &quot;Mi coche es un &quot;.$marcas[&apos;3rosas&apos; - 2];\n
  • Poner el ejemplo arrays1.pl\n\n#!/opt/local/bin/perl\n# Este gui&amp;#xF3;n muestra c&amp;#xF3;mo podemos tener un escalar y un array con el mismo nombre\nuse 5.010;\nuse utf8;\nuse warnings;\n\n$marcas = &quot;ESCALAR marcas&quot;;\n\n$marcas[0]=&quot;Ford&quot;;\n$marcas[1]=&quot;Mercedes&quot;;\n$marcas[2]=&quot;Kia&quot;;\n\n\nsay $marcas;\nsay &quot;Mi coche es un $marcas[1]&quot;;\n\n#Los &amp;#xED;ndices son enteros, por lo que podemos usar escalares para acceder a ellos\n$indice=2;\nsay &quot;Mi coche es un $marcas[$indice]&quot;;\n\n#Aunque esta l&amp;#xED;nea muestra un warning, es\nsay &quot;Mi coche es un &quot;.$marcas[&apos;3rosas&apos; - 2];\n
  • \n
  • Todo esto est&amp;#xE1; en el ejemplo arrays2.pl\n
  • Todo esto est&amp;#xE1; en el ejemplo arrays2.pl\n
  • Todo esto est&amp;#xE1; en el ejemplo arrays2.pl\n
  • \n
  • \n
  • \n
  • &amp;#xBF;por qu&amp;#xE9; tanta flexibilidad? Imaginad que necesitamos crear una lista como esta\nqw{/usr/dict/words\n/home/rootbeer/.ispell_english\n}\n\ny s&amp;#xF3;lo tuvi&amp;#xE9;semos el delimitador /. Tendr&amp;#xED;amos que estar escapando todo el rato y, adem&amp;#xE1;s, no ser&amp;#xED;a muy legible\n\n
  • Esto del intercambio de puede hacer porque la lista de la derecha se construye antes de la asignaci&amp;#xF3;n y por lo tanto conserva los valores originales\n
  • \n
  • \n
  • \n
  • Importante:\n@todos el nombre de un array se expande a la lista que contiene, por eso un array tal cual lo hemos definido no puede formar parte de otro array y @todos se convierte en la &amp;#x201C;suma&amp;#x201D; de dos arrays. \n\nVeremos como gestionar esto cuando trabajemos con dependencias.\n
  • \n
  • ver el ejemplo arrays_poppush.pl\n
  • \n
  • \n
  • \n
  • \n
  • ejemplo: arrays_interpolacion.pl\n\nGenera un listado de elementos separados por espacios.\n\nCuidado con la interpolaci&amp;#xF3;n\n\n\n
  • ejemplo: arrays_interpolacion.pl\n\nGenera un listado de elementos separados por espacios.\n\nCuidado con la interpolaci&amp;#xF3;n\n\n\n
  • ejemplo: arrays_interpolacion.pl\n
  • ejemplo: arrays_interpolacion.pl -&gt; este c&amp;#xF3;digo est&amp;#xE1; ah&amp;#xED; metido\n
  • ejemplo: arrays_foreach.pl -&gt; este c&amp;#xF3;digo est&amp;#xE1; en ese fichero\n
  • ejemplo: arrays_foreach.pl -&gt; esto est&amp;#xE1; en ese ejemplo\n
  • ejemplo: arrays_foreach.pl -&gt; esto est&amp;#xE1; en ese ejemplo\n
  • ejemplo: arrays_foreach.pl -&gt; esto est&amp;#xE1; en ese ejemplo\n
  • \n
  • Ojo con el ejemplo: los elementos est&amp;#xE1;n ordenados por ascii no por valor!!!\n
  • El ejemplo est&amp;#xE1; en arrays_each.pl\n\nExplicar c&amp;#xF3;mo funciona: en cada llamada a each se devuelve una pareja &amp;#xED;ndice/valor\n
  • Esto est&amp;#xE1; en el ejemplo arrays_for.pl \n
  • Si esto lo entend&amp;#xE9;is bien, sacar&amp;#xE9;is el m&amp;#xE1;ximo partido a Perl.\n
  • Si esto lo entend&amp;#xE9;is bien, sacar&amp;#xE9;is el m&amp;#xE1;ximo partido a Perl.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Ejecutar estos dos comandos y ver qu&amp;#xE9; hace sort en contexto escalar\n
  • esto est&amp;#xE1; en contexto2.pl\n
  • esto est&amp;#xE1; en contexto2.pl\n\nLa manera correcta de generar un array de cero elementos es @array = ();\n
  • \n
  • \n
  • - Limite: memoria y n&amp;#xFA;mero de l&amp;#xED;neas, recordad que tenemos un m&amp;#xE1;ximo de &amp;#xED;ndices.\n\n
  • - Limite: memoria y n&amp;#xFA;mero de l&amp;#xED;neas, recordad que tenemos un m&amp;#xE1;ximo de &amp;#xED;ndices.\n- Para dejar de leer l&amp;#xED;neas:CTRL+D en unix CTRL+Z en windows\n- ejecutar el ejemplo contexto4.pl &lt; contexto4.txt\n\n
  • \n
  • Transcript of "Perl2 arrays"

    1. 1. Programación en Perl Arrays
    2. 2. ArraysLos escalares sirven para almacenar “una cosade algo”Los arrays son una forma de almacenar “muchascosas de algo”Definiciones: Lista: colección ordenada de escalares Array: variable que contiene una lista
    3. 3. ArraysLos arrays/listas están ordenados, es decir, tienenuna determinada secuencia.Los array/listas están indexados por enterorsempezando en ceroDado que los arrays son listas de escalares, puedenalmacenar indistintamente cadenas o números.Pueden tener cualquier número de elementos. Ellímite lo pone la memoria disponible.
    4. 4. Arrays: accediendo a sus elementos1.$marcas[0] = "Ford";2.$marcas[1] = "Mercedes";3.$marcas[2] = "Kia"; El “nombre” de este array es marcas. Podemos tener en el mismo script un escalar $marcas y un array marcas. El índice es un número, por lo que podemos acceder usando $marcas[$indice - 4] ¿Qué mostrará por pantalla say $marcas[‘3rosas’ - 2];?
    5. 5. Arrays: accediendo a sus elementos1.$marcas[0] = "Ford";2.$marcas[1] = "Mercedes";3.$marcas[2] = "Kia"; El “nombre” de este array es marcas. Podemos tener en el mismo script un escalar $marcas y un array marcas. El índice es un número, por lo que podemos acceder usando $marcas[$indice - 4] ¿Qué mostrará por pantalla say $marcas[‘3rosas’ - 2];? Mercedes
    6. 6. Arrays ¿qué pasa si nos salimos de los límites del array?1.$marcas[0] = "Ford";2.$marcas[1] = "Mercedes";3.$marcas[2] = "Kia";4.$marcas[100] = "Toyota";
    7. 7. Arrays ¿qué pasa si nos salimos de los límites del array?1.$marcas[0] = "Ford";2.$marcas[1] = "Mercedes";3.$marcas[2] = "Kia";4.$marcas[100] = "Toyota"; Se crean 98 elementos y se les asigna el valor undef
    8. 8. Arrays: último índice
    9. 9. Arrays: último índice1.$indice = $#marcas; #índice del último elemento, 1002.$elementos = $indice + 1; #hay 101 elementos3.$marcas[$#marcas] = “Honda” # Sobreescribimos el último                            # elemento
    10. 10. Arrays: último índice1.$indice = $#marcas; #índice del último elemento, 1002.$elementos = $indice + 1; #hay 101 elementos3.$marcas[$#marcas] = “Honda” # Sobreescribimos el último                            # elemento Como acceder al último elemento es algo queocurre muy a menudo, perl nos da un “atajo” usar íncides negativos1.$marcas[-1] #Devuelve Honda2.$marcas[-101] #Devuelve el primer elemento3.$marcas[-200] = “Honda” # Error
    11. 11. Arrays: literales de lista (1, 3, 5, 7) (“nombre”, 3, 5.5, “López”) () #Lista vacía (1..100) # lista de 100 enteros usando el operador de rango (5..1) #lista vacía (no funciona hacia abajo) ($n..$m) (0..$#marcas) ($n+10..$p+$q) (‘maría’, ‘mariano’, ‘luis’, ‘rodrigo’, ‘ana’)
    12. 12. Arrays: qwEn lugar de(‘maría’, ‘mariano’, ‘luis’, ‘rodrigo’, ‘ana’)podemos hacer lo siguienteqw( maría mariano luis rodrigo ana )Cada “palabra” se trata como una cadena entrecomilla simple, así que no podemos usarsecuencias de escape o interpolación de variables
    13. 13. Arrays: qwOtra forma de poner la lista esqw( maría mariano luis rodrigo ana)
    14. 14. Arrays: qwPodemos usar cualquier delimitadorqw! maría mariano luis rodrigo ana !qw# maría mariano luis rodrigo ana #Podemos usar también los siguientes “pares” dedelimitadoresqw{ maría mariano luis rodrigo ana }qw[ maría mariano luis rodrigo ana ]qw< maría mariano luis rodrigo ana >Si necesitamos incluir el delimitador tenemos queescaparlo:qw! google msn yahoo! apple !
    15. 15. Arrays: asignación de listasAsignar los valores de una lista a un conjunto devariables:($nombre, $apellido1, $apellido2) = (‘Luis’,‘López’, ‘Pérez’);Podemos intercambiar valores($admin, $superadmin) = ($superadmin, $admin)
    16. 16. Arrays: asignación de listas¿Qué pasa si el número de elementos no coincide?($nombre, $apellido1) = qw( luis López Pérez)El “Pérez” de la derecha se descarta.($nombre, $apellido1, $apellido2) = qw( luis López )$apellido2 vale undef.
    17. 17. Arrays: asignación de listas
    18. 18. Arrays: asignación de listas¿y si queremos asignar la lista a un array?($users[0], $users[1], $users[2]) = qw/ pilar pepe pedro /
    19. 19. Arrays: asignación de listas¿y si queremos asignar la lista a un array?($users[0], $users[1], $users[2]) = qw/ pilar pepe pedro /En lugar de esto podemos utilizar lo siguiente@users = qw/ pilar pepe pedro /
    20. 20. Arrays: asignación de listasMás asignaciones de lista a array @usuarios = qw/ user1 user2 user3 / @enteros = (1..100) @todos = (@usuarios, @administradores) @cosas = (@ususarios, ‘cadena’, entero, $variable)
    21. 21. Arrays: asignación de listasMuy importante:@todos = (@usuarios, @administradores)no es un array de arrays, es la “concatenación” de dos arrays.@todos contiene los elementos de @usuarios seguidos de loselementos de @administradoresCopia de arrays:@copia = @todosEn realidad esto es una asignación de listas (@todos seexpande a lista y se asigna a @copia)
    22. 22. Arrays: funciones y operadorespop: quita un elemento del array por el finalpush: añade un elemento al array por el finalunshift: saca un elemento del array por elprincipioshift: añade un elemento al array por elprincipio
    23. 23. Arrays: funciones y operadoressplice: sirve para obtener “rebanar” de un array
    24. 24. Arrays: funciones y operadores
    25. 25. Arrays: funciones y operadores1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 2; # se borra todo después de
    26. 26. Arrays: funciones y operadores1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 2; # se borra todo después de1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 1, 2; # se borran los elementos
    27. 27. Arrays: funciones y operadores1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 2; # se borra todo después de1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 1, 2; # se borran los elementos1.@picapiedra = qw( pablo pedro betty wilma dino );2.@borrado = splice @array, 1, 2, qw(NUEVO); # se borran los # elementos pedro y betty y en su lugar se # añade NUEVO
    28. 28. Arrays: interpolación en cadenas
    29. 29. Arrays: interpolación en cadenas1.@picapiedra = qw( pablo pedro betty wilma dino );2.say “Los picapiedra son @picapiedra”; ----- Los picapiedra son: pablo pedro betty wilma dino
    30. 30. Arrays: interpolación en cadenas1.@picapiedra = qw( pablo pedro betty wilma dino );2.say “Los picapiedra son @picapiedra”; ----- Los picapiedra son: pablo pedro betty wilma dino1.@picapiedra = qw( pablo pedro betty wilma dino );2.say “mi email es pedro@picapiedra.com”; ----- mi email es pedropablo pedro betty wilma dino.com
    31. 31. Arrays: interpolación en cadenas1.@picapiedra = qw( pablo pedro betty wilma dino );2.say “mi email es pedro@picapiedra.com”; ----- mi email es pedropablo pedro betty wilma dino.com
    32. 32. Arrays: interpolación en cadenas1.@datos = qw( pablo pedro betty wilma dino );2.$datos = “ESCALAR”3.print "$datos[3]n"; # imprime $datos[3] -> wilma4.print "${datos}[3]n"; # imprime "ESCALAR[3]"                       #(protegido por los corchetes)5.print "$datos"."[3]n"; # imprime ESCALAR[3]6.print "$datos[3]n"; # imprime ESCALAR[3], el corchete está                     # escapado
    33. 33. Arrays: foreach Estructura de control que itera sobre todos los elementos del array1.@datos = qw( pablo pedro betty wilma dino );2.foreach $dato (@datos) {3. print "El personaje es $dato.n";4.} En cada iteración, la variable $dato almacena uno de los elementos del array.
    34. 34. Arrays: foreachLa variable $dato NO es una copia del elementodel array, por lo que si se modifica en el bucle,se modifica el array.El valor de la variable de control después delbucle recupera el valor que tenía antes.
    35. 35. Arrays: foreachLa variable $dato NO es una copia del elementodel array, por lo que si se modifica en el bucle,se modifica el array.El valor de la variable de control después delbucle recupera el valor que tenía antes....pero esto son muchos caracteres que escribir¿no era perl un lenguaje conciso?
    36. 36. Arrays: foreach1.#Vamos a hacerlo más corto. No necesitamos el array datos2.foreach $dato ( qw( pablo pedro betty wilma dino ) ) {3. print "El personaje es $dato.n";4.}5.6.#No necesitamos la variable $dato, podemos usar $_7.foreach ( qw( pablo pedro betty wilma dino ) ) {8. print "El personaje es $_.n";9.}10.11.#Dado que sólo tenemos una instrucción dentro del bucle podemos hacer lo siguiente12.print "El personaje es $_.n" foreach ( qw( pablo pedro betty wilma dino ) );
    37. 37. Arrays: sort y reversesort: Devuelve un array con los elementosordenador por orden alfabético @ordenado = sort (@array) @numeros = sort 97..110reverse: Devuelve un array con los elementos enorden inverso @reves = reverse @array
    38. 38. Arrays: each A partir de la versión 5.12 de perl, es posible usar la función each con arrays (antes sólo se podía con hashes)1.use 5.012;2.#Recorriendo un array con each3.my @datos = qw( pablo pedro betty wilma dino );4.while(my($indice,$valor) = each @datos) {5.        say "$indice: $valor";6.}7.#Si no podemos usar each, tenemos que hacerlo con foreach8.@datos = qw( pablo pedro betty wilma dino );9.foreach my $indice (0..$#datos) {10.        say "$indice: $datos[$indice]";11.}
    39. 39. Arrays: for1.@datos = qw( pablo pedro betty wilma dino );2.for($i = 0; $i < $#datos; $i++ ) {3.        say "$i: $datos[$i]";4.}
    40. 40. LO MÁS IMPORTANTE DEL CURSO:
    41. 41. LO MÁS IMPORTANTE DEL CURSO:LOS CONTEXTOS DE EJECUCIÓN
    42. 42. Contextos
    43. 43. ContextosQue sea importante no quiere decir que sea difícil. Veamoslo
    44. 44. ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas diferentesen función de cómo y dónde se usa
    45. 45. ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas diferentesen función de cómo y dónde se usaEsto no es para vosotros un concepto nuevo ni muchomenos. Por ejemplo:
    46. 46. ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas diferentesen función de cómo y dónde se usaEsto no es para vosotros un concepto nuevo ni muchomenos. Por ejemplo: Me LARGO de aquí
    47. 47. ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas diferentesen función de cómo y dónde se usaEsto no es para vosotros un concepto nuevo ni muchomenos. Por ejemplo: Me LARGO de aquí Que día tan LARGO
    48. 48. ContextosQue sea importante no quiere decir que sea difícil. VeamosloDada una expresión, esta puede significar cosas diferentesen función de cómo y dónde se usaEsto no es para vosotros un concepto nuevo ni muchomenos. Por ejemplo: Me LARGO de aquí Que día tan LARGOSi te pregunto por el significado de la palabra LARGO turespuesta dependerá del contexto.
    49. 49. ContextosYa hemos visto un ejemplo de contextos: 2*3=6 2 x 3 = 222El operador define el contexto de la expresióny, en función de este, se trata 2 y 3 comocadenas o como números.
    50. 50. ContextosCuando perl analiza una expresión siempre espera unescalar o una lista.Una expresión siempre devuelve el valor apropiado según elcontexto en el que se evalúeVeamos qué significa esto con un ejemplo:¿Qué significa la expresión @datos? En un contexto de lista es la lista de elementos del array En un contexto escalar significa el número de elementos del array
    51. 51. Contextos1.@datos = qw( pablo pedro betty wilma dino );2.$ordenados = sort @datos # contexto lista: sort espera # una lista3.$valor = 45 + @datos # contexto escalar: el operador + # opera sobre escalares. # $valor valdrá 504.$valor = @datos # contexto escalar: asignación a un escalar. # $valor valdrá 5
    52. 52. Contextos¿Qué ocurre si intentamos utilizar una expresión quegenera una lista en un contexto escalar? Por ejemplo: reverse @array Es una expresión que genera una lista con los elementos del array en orden inverso @resultado = reverse qw( elem1 elem2 elem3 ) ¿y si hacemos lo siguiente? $resultado = reverse qw( elem1 elem2 elem3 ) ¿Qué vale resultado?
    53. 53. Contextos¿Qué ocurre si intentamos utilizar una expresión quegenera una lista en un contexto escalar? Por ejemplo: reverse @array Es una expresión que genera una lista con los elementos del array en orden inverso @resultado = reverse qw( elem1 elem2 elem3 ) ¿y si hacemos lo siguiente? $resultado = reverse qw( elem1 elem2 elem3 ) ¿Qué vale resultado? 3mele2mele1mele
    54. 54. Contextos¿Y porqué devuelve eso y no otra cosa?Devuelve eso porque el sentido común de LarryWall determinó en su día que eso era así.Hasta que aprendamos a tener el sentido comúnde Larry, tendremos que mirar ladocumentación: perldoc -f reverse perldoc -f sort
    55. 55. Contextos ¿Qué ocurre si intentamos utilizar una expresión que genera un escalar en un contexto de lista? Se genera una lista de un único elemento:1.@array = 6 * 7; # Se crea un array de un elemento (42)2.@array = "hola" . a . "todos";
    56. 56. Contextos Cuidado con la siguiente expresión:1.@array = undef; # Se genera un array de un elemento undef # (undef)2.say "elementos: $#array";3. @array = (); #Esto es un array de cero elementos4.say "elementos: $#array";
    57. 57. Contextos A veces podemos necesitar forzar un contexto escalar donde perl espera una lista1.@picapiedra = qw( pablo pedro betty wilma dino );2.print "¿cuántos son los picapiedra?n";3.say "Los picapiedra son ", @picapiedra ; # MAL, imprime los nombres4.say "los picapiedra son ", scalar @picapiedra; # Correcto, da el número de elementos del array
    58. 58. Contextos: <STDIN> En contexto de lista, este operador devuelve todas las líneas de entrada en un array1.@lines = <STDIN>; # Lee todas las líneas de la entrada # estándar
    59. 59. Contextos: <STDIN> Si la entrada viene de un fichero, se lee todo el fichero en memoria. Cuando se lee el fichero, se leen también los caracteres de fin de línea. Podemos utilizar chomp en contexto de lista para quitarlos1.@lines = <STDIN>;2.chomp (@lines);
    60. 60. Contextos: <STDIN> Si la entrada viene de un fichero, se lee todo el fichero en memoria. Cuando se lee el fichero, se leen también los caracteres de fin de línea. Podemos utilizar chomp en contexto de lista para quitarlos1.chomp(@lines = <STDIN>);
    61. 61. Ejercicios1. Escribe un programa que pida al usuario una lista de cadenas en líneas separadas y las imprima en orden inverso a como se han leído.2. Escribe un programa que lea una lista de números (cada uno en una línea) hasta un EOF e imprima el nombre de la persona asociada a cada número de la siguiente lista: mariana, luis, miguel, ramón, rosalía, juan, pablo, natalia3. Implementar una pila (first in, first out) en perl. Dar al usuario las siguientes opciones: 1. Añadir elemento a la pila 2. Sacar elemento de la pila 3. Imprimir pila 4. Salir
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×