SlideShare una empresa de Scribd logo
1 de 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.

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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++
 

Similar a Perl3 subrutinas

Similar a 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
 

Más de 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
 

Más de 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
 

Último

Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfAlfaresbilingual
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOluismii249
 
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOPsicoterapia Holística
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxiemerc2024
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIAFabiolaGarcia751855
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfpatriciaines1993
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docxEliaHernndez7
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.JonathanCovena1
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfapunteshistoriamarmo
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxNadiaMartnez11
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSYadi Campos
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024IES Vicent Andres Estelles
 

Último (20)

Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VSSEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
SEPTIMO SEGUNDO PERIODO EMPRENDIMIENTO VS
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 

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.

Notas del editor

  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