SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Programación en Perl
    Subrutinas / funciones
Definir una subrutina



1.sub marineros {
2.    $n += 1; # Global variable $n
3.    print "¡Hola marinero $n!n";
4.}
Definir una subrutina

    Palabra
                   Nombre de la
reservada sub
                    subrutina



 1.sub marineros {
 2.    $n += 1; # Global variable $n
 3.    print "¡Hola marinero $n!n";
 4.}
Definir una subrutina
La subrutina puede estar en cualquier parte del
fichero.

La definición de subrutinas es global: una vez definidas
se pueden usar desde cualquier parte o fichero
durante la ejecución del script.

Si dos subrutinas tienen el mismo nombre, se aplica la
última que se lee

   En este caso se lanza un warning.

Todas las variables definidas hasta ahora son globales.
Llamar a una subrutina

1.&marineros




       Se llama al nombre de la función con un &
       delante
Retorno de valores


Todas las funciones en perl deben devolver algo
SIEMPRE

Perl devuelve por defecto el valor de la última
expresión evaluada dentro de la subrutina.
Retorno de valores


1.$a = 10;
2.$b = 20;
3.sub funcion1 {
4.    say "Dentro de función 1";
5.    $a + $b;
6.}
7. 
8.say "funcion1: ",&funcion1;
Retorno de valores

1.$a = 10;
2.$b = 20;
3.sub funcion2 {
4.    say "Dentro de función 2";
5.    $a + $b;
6.    say "Aquí imprimimos algo";
7.}

8.say "funcion2: ",&funcion2
Retorno de valores

1.$a = 10;
2.$b = 20;
3.sub funcion2 {
4.    say "Dentro de función 2";
5.    $a + $b;
6.    say "Aquí imprimimos algo";
7.}

8.say "funcion2: ",&funcion2

 -------

 funcion2: 1
Retorno de valores

Se devuelve el resultado de la última expresión
evaluada.

La última expresión evaluada es print, por lo
que se devuelve el resultado de evaluar print

El 1 significa que el print se evaluó
correctamente.
Retorno de valores

1.$a = 10;
2.$b = 20;
3.sub maximo {
4.  if ($a > $b) {
5.    $a;
6.  } else {
7.    $b;
8.  }
9.}
10. 
11.say "maximo: ",&maximo
Argumentos
Argumentos

Nuestras subrutinas son muy poco prácticas y
difíciles de mantener: tenemos que definir
constantemente variables globales para poder
usarlas.
Argumentos

Nuestras subrutinas son muy poco prácticas y
difíciles de mantener: tenemos que definir
constantemente variables globales para poder
usarlas.

...pero perl permite pasar una LISTA de
argumentos a una función
Argumentos

Nuestras subrutinas son muy poco prácticas y
difíciles de mantener: tenemos que definir
constantemente variables globales para poder
usarlas.

...pero perl permite pasar una LISTA de
argumentos a una función


insisto:   LISTA de argumentos
Argumentos

      Así llamamos a una función y le pasamos una
      lista de argumentos

1.
                  $max = &maximo(10, 50);




     Perl almacena la lista que recibe como argumento
     en el array @_

     Reescribamos nuestra función maximo:
Argumentos
1.$a = 10;
2.$b = 20;
3.sub maximo {
4.  if ($_[0] > $_[1]) {
5.    $_[0];
6.  } else {
7.    $_[1];
8.  }
9.}
10. 
11.say "maximo: ",&maximo($a, $b)



       ...un poco complicada de leer. En seguida
       veremos como mejorar esto.
Argumentos: @_

@_ es una lista privada dentro de la función: si
esta lista tenía un valor antes de la llamada,
este valor se guarda y el intérprete lo recupera
cuando se sale de la subrutina.

Si esto no fuese así, sería complicado anidar
subrutinas.

Incluso en subrutinas recursivas, cada llamada
tiene su propia copia de la lista @_.
Variables privadas
       Por defecto, perl siempre trabaja con variables
       globales.

       Perl permite crear variables privadas o “variables
       léxicas” (lexical variables) a través del operador my.
1.sub max {
2.   my($m, $n); # variables privadas: válidas sólo en este
                 #bloque de código
3.  ($m, $n) = @_; # asignamos valores a las variables
4.  if ($m > $n) {
5.    $m
6.  } else {
7.    $n
8.  }
9.}
Variables privadas

       Escribimos una versión más legible de nuestra
       función maximo


1.$a = 100;
2.$b = 200;
3.sub maximo {
4.  my($a,$b);
5.  ($a, $b) = @_;
6.  if ($a > $b) { $a; } else { $b; }
7.}
8. 
9.say "maximo: ",&maximo(10, 20);
10.say "maximo: ",&maximo($a, $b)
Número variable de
   argumentos
Número variable de
    argumentos
Las funciones en perl reciben una lista de
argumentos por lo tanto ¿cuántos argumentos
puede recibir una función en perl?
Número variable de
    argumentos
Las funciones en perl reciben una lista de
argumentos por lo tanto ¿cuántos argumentos
puede recibir una función en perl?

  2147483647, es decir, máximo número de
  índices que puede tener un array
Número variable de
    argumentos
Las funciones en perl reciben una lista de
argumentos por lo tanto ¿cuántos argumentos
puede recibir una función en perl?

  2147483647, es decir, máximo número de
  índices que puede tener un array

Debemos, por tanto, controlar el número de
argumentos que recibimos
Argumentos: ejercicios


modificar la función máximo anterior para que
muestre un aviso por pantalla cuando se reciben
más de 2 argumentos.

escribir una función maximo que acepte un
número arbitrario de argumentos
Más sobre variables
                    privadas
            Las variables privadas se pueden definir en
            cualquier bloque de código:

1. $cuadrado = 10;
2. say "$cuadrado antes vale $cuadrado";
3. foreach (1..10) {
4.   my($cuadrado) = $_ * $_;
5.   print "$_ al cuadrado es $cuadrado.n";
6. }
7. say "$cuadrado después vale $cuadrado";


                         1. $cuadrado = 10;
                         2. say "$cuadrado antes vale $cuadrado";
                         3. {
                         4.   my($cuadrado) = "C U A D R A D O";
                         5.   print "$cuadrado dentro es $cuadrado.n";
                         6. }
                         7. say "$cuadrado después vale $cuadrado";
Más sobre variables
       privadas
Perl tiende a ser un lenguaje muy permisivo.

Podemos imponer cierta disciplina con el uso del pragma use
strict.

¿Qué hace este pragma? impone restricciones:

   nos obliga a declarar todas las variables con my.

   más restricciones: perldoc strict.

A partir de la versión 5.12 de perl, se usa strict por defecto, así
que si usamos use 5.012 no tenemos que usar use strict.

Consejo: usar siempre use strict (a no ser que tengáis un buen
motivo para no usarlo... y normalmente no lo tendréis)
Return



Nos permite salir de la subrutina devolviendo un
valor determinado.
Devolviendo valores no
             escalares
       Si se llama a una función en un entorno de
       lista, puede devolver una lista de valores

1.sub rango {
2.    my ($a,$b) = @_;
3.    if ($a > $b) {
4.        $b..$a;
5.    } else {
6.        $a..$b;
7.    }
8.}
9.$a = 10;
10.$b = 30;
11.@lista = &rango(10, 30);
Devolviendo valores no
       escalares
La función wantarray devuelve true en un
contexto de lista y false en un contexto escalar.
Devolviendo valores no
            escalares
1.sub rango {
        La función want array devuelve true en
2.    my ($a,$b) = @_;                            un
3.    if (wantarray) {
4.      contexto > $b) { y false en un contexto
           if ($a de lista                        escalar.
5.            $b..$a;
6.        } else {
7.            $a..$b;
8.        }
9.    } else {
10.        return abs($a - $b);
11.    }
12.}
13.$a = 10;
14.$b = 30;
15.@lista = &rango($a, $b);
16.$escalar = &rango ($a, $b);
17.say "@lista = @lista";
18.say "$escalar = $escalar";
state


Si definimos una variable como state dentro de
una subrutina, perl guarda el valor de la misma
entre sucesivas llamadas a una función
(es como una variable static)

Disponible a partir de la versión 5.10 de perl
Ejercicios

1. Escribe una subrutina en perl que acepte una lista de números y calcule la suma.
   Hacerla de forma que a medida que se llama a la función para sumar números, esta
   almacena la suma acumulada en las diferentes llamadas:
   acumula (1,2,3) -> 6
   acumula (4,5) -> devuelve 6+9=15
2. Modificar la función anterior para resetear el valor acumulado y ponerlo a cero cuando
   se le pasa como argumento una lista vacía.
3. Modificar la función anterior para que, al usarse en un entorno escalar, devuelva el
   valor acumulado.

Weitere ähnliche Inhalte

Was ist angesagt?

50 Php. Funciones Que Devuelven Valores
50 Php. Funciones Que Devuelven Valores50 Php. Funciones Que Devuelven Valores
50 Php. Funciones Que Devuelven ValoresJosé M. Padilla
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Richard Eliseo Mendoza Gafaro
 
El shell-bash
El shell-bashEl shell-bash
El shell-bashlluera
 
Shell script
Shell scriptShell script
Shell scriptuniminuto
 
Ejercicios resuelto de shell script
Ejercicios resuelto  de shell scriptEjercicios resuelto  de shell script
Ejercicios resuelto de shell scriptYarlet Urda
 
02 pythonenpocospasosejercicios.ipynb colaboratory
02 pythonenpocospasosejercicios.ipynb   colaboratory02 pythonenpocospasosejercicios.ipynb   colaboratory
02 pythonenpocospasosejercicios.ipynb colaboratoryLesli Molina Soto
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)Oliver Centeno
 
Clase10 stringsio
Clase10 stringsioClase10 stringsio
Clase10 stringsiojorg_marq
 
Tema 19 funciones de texto
Tema 19 funciones de textoTema 19 funciones de texto
Tema 19 funciones de textoceboga
 
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...GabrielGonzaloDavila
 
Funciones C++ modificado
Funciones C++ modificadoFunciones C++ modificado
Funciones C++ modificadocompumet sac
 

Was ist angesagt? (19)

50 Php. Funciones Que Devuelven Valores
50 Php. Funciones Que Devuelven Valores50 Php. Funciones Que Devuelven Valores
50 Php. Funciones Que Devuelven Valores
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
 
Php
PhpPhp
Php
 
El shell-bash
El shell-bashEl shell-bash
El shell-bash
 
Shell script
Shell scriptShell script
Shell script
 
Ejercicios resuelto de shell script
Ejercicios resuelto  de shell scriptEjercicios resuelto  de shell script
Ejercicios resuelto de shell script
 
02 pythonenpocospasosejercicios.ipynb colaboratory
02 pythonenpocospasosejercicios.ipynb   colaboratory02 pythonenpocospasosejercicios.ipynb   colaboratory
02 pythonenpocospasosejercicios.ipynb colaboratory
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Los scripts de linux
Los scripts de linuxLos scripts de linux
Los scripts de linux
 
Funciones en Lenguaje C
Funciones en Lenguaje CFunciones en Lenguaje C
Funciones en Lenguaje C
 
Clase10 stringsio
Clase10 stringsioClase10 stringsio
Clase10 stringsio
 
Php
PhpPhp
Php
 
Php
PhpPhp
Php
 
Tema 19 funciones de texto
Tema 19 funciones de textoTema 19 funciones de texto
Tema 19 funciones de texto
 
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
 
C Funciones
C FuncionesC Funciones
C Funciones
 
Funciones C++ modificado
Funciones C++ modificadoFunciones C++ modificado
Funciones C++ modificado
 
Semana 4 Javascript funciones y Metodos
Semana 4   Javascript funciones y MetodosSemana 4   Javascript funciones y Metodos
Semana 4 Javascript funciones y Metodos
 
Doc tutorial-c++
Doc tutorial-c++Doc tutorial-c++
Doc tutorial-c++
 

Ähnlich wie Perl3 subrutinas

Ähnlich wie Perl3 subrutinas (20)

Php funciones en detalle
Php   funciones en detallePhp   funciones en detalle
Php funciones en detalle
 
53 Php. Clases Y Objetos
53 Php. Clases Y Objetos53 Php. Clases Y Objetos
53 Php. Clases Y Objetos
 
82 Php. Ver Y Modificar Estructuras
82 Php. Ver Y Modificar Estructuras82 Php. Ver Y Modificar Estructuras
82 Php. Ver Y Modificar Estructuras
 
Clase 2
Clase 2 Clase 2
Clase 2
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
Funciones en php
Funciones en phpFunciones en php
Funciones en php
 
Clase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpooClase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpoo
 
Estadística con Lenguaje R: Sesión 8
Estadística con Lenguaje R: Sesión 8Estadística con Lenguaje R: Sesión 8
Estadística con Lenguaje R: Sesión 8
 
Js control de flujo
Js control de flujoJs control de flujo
Js control de flujo
 
PHP mode on
PHP mode onPHP mode on
PHP mode on
 
4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario
 
Java script teoria
Java script teoriaJava script teoria
Java script teoria
 
0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf
 
Tutorial de php
Tutorial de phpTutorial de php
Tutorial de php
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
Perl2 arrays
Perl2 arraysPerl2 arrays
Perl2 arrays
 
Presen iii 26 funciones
Presen iii  26 funcionesPresen iii  26 funciones
Presen iii 26 funciones
 
Tema2[php]
Tema2[php]Tema2[php]
Tema2[php]
 
Arrays en PHP y Funciones de Mysql
Arrays en PHP y Funciones de MysqlArrays en PHP y Funciones de Mysql
Arrays en PHP y Funciones de Mysql
 
Php1
Php1Php1
Php1
 

Mehr von Alfonso Alba

Bienvenido a la republica independiente de las pruebas unitarias con Core Data
Bienvenido a la republica independiente de las pruebas unitarias con Core DataBienvenido a la republica independiente de las pruebas unitarias con Core Data
Bienvenido a la republica independiente de las pruebas unitarias con Core DataAlfonso Alba
 
Persistencia de datos con Parse
Persistencia de datos con ParsePersistencia de datos con Parse
Persistencia de datos con ParseAlfonso Alba
 
Perl6 expresiones regulares
Perl6 expresiones regularesPerl6 expresiones regulares
Perl6 expresiones regularesAlfonso Alba
 
Plantillajornadasversion2 100708010347-phpapp01
Plantillajornadasversion2 100708010347-phpapp01Plantillajornadasversion2 100708010347-phpapp01
Plantillajornadasversion2 100708010347-phpapp01Alfonso Alba
 

Mehr von Alfonso Alba (9)

Bienvenido a la republica independiente de las pruebas unitarias con Core Data
Bienvenido a la republica independiente de las pruebas unitarias con Core DataBienvenido a la republica independiente de las pruebas unitarias con Core Data
Bienvenido a la republica independiente de las pruebas unitarias con Core Data
 
Persistencia de datos con Parse
Persistencia de datos con ParsePersistencia de datos con Parse
Persistencia de datos con Parse
 
Usuarios ipad
Usuarios ipadUsuarios ipad
Usuarios ipad
 
Git
GitGit
Git
 
Perl6 expresiones regulares
Perl6 expresiones regularesPerl6 expresiones regulares
Perl6 expresiones regulares
 
Perl5 hashes
Perl5 hashesPerl5 hashes
Perl5 hashes
 
Perl1 escalares
Perl1 escalaresPerl1 escalares
Perl1 escalares
 
Perl4 io
Perl4 ioPerl4 io
Perl4 io
 
Plantillajornadasversion2 100708010347-phpapp01
Plantillajornadasversion2 100708010347-phpapp01Plantillajornadasversion2 100708010347-phpapp01
Plantillajornadasversion2 100708010347-phpapp01
 

Kürzlich hochgeladen

Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfTarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfCarol Andrea Eraso Guerrero
 
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfluisantoniocruzcorte1
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptAlberto Rubio
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfsamyarrocha1
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 
La evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariaLa evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariamarco carlos cuyo
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfDannyTola1
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleJonathanCovena1
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 

Kürzlich hochgeladen (20)

Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfTarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
 
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdf
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 
La evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariaLa evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundaria
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdf
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
Introducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo SostenibleIntroducción:Los objetivos de Desarrollo Sostenible
Introducción:Los objetivos de Desarrollo Sostenible
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 

Perl3 subrutinas

  • 1. Programación en Perl Subrutinas / funciones
  • 2. Definir una subrutina 1.sub marineros { 2.    $n += 1; # Global variable $n 3.    print "¡Hola marinero $n!n"; 4.}
  • 3. Definir una subrutina Palabra Nombre de la reservada sub subrutina 1.sub marineros { 2.    $n += 1; # Global variable $n 3.    print "¡Hola marinero $n!n"; 4.}
  • 4. Definir una subrutina La subrutina puede estar en cualquier parte del fichero. La definición de subrutinas es global: una vez definidas se pueden usar desde cualquier parte o fichero durante la ejecución del script. Si dos subrutinas tienen el mismo nombre, se aplica la última que se lee En este caso se lanza un warning. Todas las variables definidas hasta ahora son globales.
  • 5. Llamar a una subrutina 1.&marineros Se llama al nombre de la función con un & delante
  • 6. Retorno de valores Todas las funciones en perl deben devolver algo SIEMPRE Perl devuelve por defecto el valor de la última expresión evaluada dentro de la subrutina.
  • 7. Retorno de valores 1.$a = 10; 2.$b = 20; 3.sub funcion1 { 4.    say "Dentro de función 1"; 5.    $a + $b; 6.} 7.  8.say "funcion1: ",&funcion1;
  • 8. Retorno de valores 1.$a = 10; 2.$b = 20; 3.sub funcion2 { 4.    say "Dentro de función 2"; 5.    $a + $b; 6.    say "Aquí imprimimos algo"; 7.} 8.say "funcion2: ",&funcion2
  • 9. Retorno de valores 1.$a = 10; 2.$b = 20; 3.sub funcion2 { 4.    say "Dentro de función 2"; 5.    $a + $b; 6.    say "Aquí imprimimos algo"; 7.} 8.say "funcion2: ",&funcion2 ------- funcion2: 1
  • 10. Retorno de valores Se devuelve el resultado de la última expresión evaluada. La última expresión evaluada es print, por lo que se devuelve el resultado de evaluar print El 1 significa que el print se evaluó correctamente.
  • 11. Retorno de valores 1.$a = 10; 2.$b = 20; 3.sub maximo { 4.  if ($a > $b) { 5.    $a; 6.  } else { 7.    $b; 8.  } 9.} 10.  11.say "maximo: ",&maximo
  • 13. Argumentos Nuestras subrutinas son muy poco prácticas y difíciles de mantener: tenemos que definir constantemente variables globales para poder usarlas.
  • 14. Argumentos Nuestras subrutinas son muy poco prácticas y difíciles de mantener: tenemos que definir constantemente variables globales para poder usarlas. ...pero perl permite pasar una LISTA de argumentos a una función
  • 15. Argumentos Nuestras subrutinas son muy poco prácticas y difíciles de mantener: tenemos que definir constantemente variables globales para poder usarlas. ...pero perl permite pasar una LISTA de argumentos a una función insisto: LISTA de argumentos
  • 16. Argumentos Así llamamos a una función y le pasamos una lista de argumentos 1. $max = &maximo(10, 50); Perl almacena la lista que recibe como argumento en el array @_ Reescribamos nuestra función maximo:
  • 17. Argumentos 1.$a = 10; 2.$b = 20; 3.sub maximo { 4.  if ($_[0] > $_[1]) { 5.    $_[0]; 6.  } else { 7.    $_[1]; 8.  } 9.} 10.  11.say "maximo: ",&maximo($a, $b) ...un poco complicada de leer. En seguida veremos como mejorar esto.
  • 18. Argumentos: @_ @_ es una lista privada dentro de la función: si esta lista tenía un valor antes de la llamada, este valor se guarda y el intérprete lo recupera cuando se sale de la subrutina. Si esto no fuese así, sería complicado anidar subrutinas. Incluso en subrutinas recursivas, cada llamada tiene su propia copia de la lista @_.
  • 19. Variables privadas Por defecto, perl siempre trabaja con variables globales. Perl permite crear variables privadas o “variables léxicas” (lexical variables) a través del operador my. 1.sub max { 2.   my($m, $n); # variables privadas: válidas sólo en este #bloque de código 3.  ($m, $n) = @_; # asignamos valores a las variables 4.  if ($m > $n) { 5.    $m 6.  } else { 7.    $n 8.  } 9.}
  • 20. Variables privadas Escribimos una versión más legible de nuestra función maximo 1.$a = 100; 2.$b = 200; 3.sub maximo { 4.  my($a,$b); 5.  ($a, $b) = @_; 6.  if ($a > $b) { $a; } else { $b; } 7.} 8.  9.say "maximo: ",&maximo(10, 20); 10.say "maximo: ",&maximo($a, $b)
  • 21. Número variable de argumentos
  • 22. Número variable de argumentos Las funciones en perl reciben una lista de argumentos por lo tanto ¿cuántos argumentos puede recibir una función en perl?
  • 23. Número variable de argumentos Las funciones en perl reciben una lista de argumentos por lo tanto ¿cuántos argumentos puede recibir una función en perl? 2147483647, es decir, máximo número de índices que puede tener un array
  • 24. Número variable de argumentos Las funciones en perl reciben una lista de argumentos por lo tanto ¿cuántos argumentos puede recibir una función en perl? 2147483647, es decir, máximo número de índices que puede tener un array Debemos, por tanto, controlar el número de argumentos que recibimos
  • 25. Argumentos: ejercicios modificar la función máximo anterior para que muestre un aviso por pantalla cuando se reciben más de 2 argumentos. escribir una función maximo que acepte un número arbitrario de argumentos
  • 26. Más sobre variables privadas Las variables privadas se pueden definir en cualquier bloque de código: 1. $cuadrado = 10; 2. say "$cuadrado antes vale $cuadrado"; 3. foreach (1..10) { 4.   my($cuadrado) = $_ * $_; 5.   print "$_ al cuadrado es $cuadrado.n"; 6. } 7. say "$cuadrado después vale $cuadrado"; 1. $cuadrado = 10; 2. say "$cuadrado antes vale $cuadrado"; 3. { 4.   my($cuadrado) = "C U A D R A D O"; 5.   print "$cuadrado dentro es $cuadrado.n"; 6. } 7. say "$cuadrado después vale $cuadrado";
  • 27. Más sobre variables privadas Perl tiende a ser un lenguaje muy permisivo. Podemos imponer cierta disciplina con el uso del pragma use strict. ¿Qué hace este pragma? impone restricciones: nos obliga a declarar todas las variables con my. más restricciones: perldoc strict. A partir de la versión 5.12 de perl, se usa strict por defecto, así que si usamos use 5.012 no tenemos que usar use strict. Consejo: usar siempre use strict (a no ser que tengáis un buen motivo para no usarlo... y normalmente no lo tendréis)
  • 28. Return Nos permite salir de la subrutina devolviendo un valor determinado.
  • 29. Devolviendo valores no escalares Si se llama a una función en un entorno de lista, puede devolver una lista de valores 1.sub rango { 2.    my ($a,$b) = @_; 3.    if ($a > $b) { 4.        $b..$a; 5.    } else { 6.        $a..$b; 7.    } 8.} 9.$a = 10; 10.$b = 30; 11.@lista = &rango(10, 30);
  • 30. Devolviendo valores no escalares La función wantarray devuelve true en un contexto de lista y false en un contexto escalar.
  • 31. Devolviendo valores no escalares 1.sub rango { La función want array devuelve true en 2.    my ($a,$b) = @_; un 3.    if (wantarray) { 4.      contexto > $b) { y false en un contexto   if ($a de lista escalar. 5.            $b..$a; 6.        } else { 7.            $a..$b; 8.        } 9.    } else { 10.        return abs($a - $b); 11.    } 12.} 13.$a = 10; 14.$b = 30; 15.@lista = &rango($a, $b); 16.$escalar = &rango ($a, $b); 17.say "@lista = @lista"; 18.say "$escalar = $escalar";
  • 32. state Si definimos una variable como state dentro de una subrutina, perl guarda el valor de la misma entre sucesivas llamadas a una función (es como una variable static) Disponible a partir de la versión 5.10 de perl
  • 33. Ejercicios 1. Escribe una subrutina en perl que acepte una lista de números y calcule la suma. Hacerla de forma que a medida que se llama a la función para sumar números, esta almacena la suma acumulada en las diferentes llamadas: acumula (1,2,3) -> 6 acumula (4,5) -> devuelve 6+9=15 2. Modificar la función anterior para resetear el valor acumulado y ponerlo a cero cuando se le pasa como argumento una lista vacía. 3. Modificar la función anterior para que, al usarse en un entorno escalar, devuelva el valor acumulado.

Hinweis der Redaktion

  1. \n
  2. - ¿porqué subrutina y no función? para diferenciar las que son nuestreas de las que ya existen en perl, pero se pueden llamar funciones.\n
  3. - ¿porqué subrutina y no función? para diferenciar las que son nuestreas de las que ya existen en perl, pero se pueden llamar funciones.\n
  4. - ¿porqué subrutina y no función? para diferenciar las que son nuestreas de las que ya existen en perl, pero se pueden llamar funciones.\n
  5. - algunos las ponen arriba y otros abajo para que se ve la parte principal del script en primer lugar\n
  6. Ejecutar el script marineros.pl\n
  7. \n
  8. Hacer el ejemplo retorno1.pl\n
  9. ¿Qué nos va a salir por pantalla?\n
  10. ejecutar retorno2.pl\n
  11. \n
  12. retorno3.pl\n
  13. \n
  14. \n
  15. \n
  16. Mostrar ahora el ejemplo argumentos1.pl (se muestra en la siguiente transparencia)\n
  17. \n
  18. \n
  19. \n
  20. variables_privadas1.pl\nResaltar que los valores de $a y $b ahora no se cambian, si no hacemos lo del my, sí que se cambian.\n
  21. \n
  22. \n
  23. \n
  24. argumentos_variables1.pl \nargumentos_variables2.pl\n\nMostrar el código de argumentos_variables2.pl y explicarlo. Cosas importantes que contar aquí:\n- uso de variables por defecto\n- uso del shift para vaciar el array de argumentos, muy común\n\n¿Qué ocurre a la función anterior si recibe una lista vacía? -> que devolverá un undef\n
  25. Poner dos ejemplos: variables_privadas2.pl\n $cuadrado = 10;\nsay "\\$cuadrado antes vale $cuadrado";\nforeach (1..10) {\n  my($cuadrado) = $_ * $_;\n  print "$_ al cuadrado es $cuadrado.\\n"; \n}\nsay "\\$cuadrado después vale $cuadrado";\n\nPoner dos ejemplos: variables_privadas3.pl\n$cuadrado = 10;\nsay "\\$cuadrado antes vale $cuadrado";\n{\n  my($cuadrado) = "C U A D R A D O";\n  print "\\$cuadrado dentro es $cuadrado.\\n"; \n}\nsay "\\$cuadrado después vale $cuadrado";\n
  26. ¿Qué problema tiene no usar my?\n\npones una variable $error = 20 y 10000 líneas más abajo escribes:\n\nif ($erro > 0) {BLABLABLA}\n\nLa liaste porque el intérprete crea la variable $erro por tí y le signa un certo así que este if siempre será falso.\n\nCon use strict esto da un error.\n
  27. \n
  28. Learning perl 6th ed. Página 76\n\nEjercicio: hacer una función que arregle el problema del rango ( el operador .. sólo funciona cuando el primer operando es menor que el segundo )\ndevolver_array.pl ->\nsub rango {\n    my ($a,$b) = @_;\n    if ($a > $b) {\n        $b..$a;\n    } else {\n        $a..$b;\n    }\n}\n \n$a = 10;\n$b = 30;\n \n@lista = &rango(10, 30);\n \nsay "@lista"\n
  29. \n
  30. ver ejemplo wantarray.pl\n
  31. \n
  32. \n