• Publicidad

Vídeo Tutorial de Perl

Aprende Perl

Vídeo Tutorial de Perl

Notapor manudg » 2014-06-20 20:00 @875

Hola, amigos, aquí os comparto el vídeo tutorial de Perl que he realizado. A continuación podéis ver los capítulos y al final la lista de reproducción:

  1. Instalación de Perl en Windows (strawberry)
  2. Variables y Constantes
  3. Los Tipos de Datos
  4. Operadores Aritméticos
  5. Operadores Relacionales
  6. Operadores para Expresiones Regulares
  7. Operadores Lógicos
  8. Operador de Selección
  9. Entrada de datos STDIN
  10. Entrada de datos $ARGV
  11. Arrays: lista
  12. Arrays: lista multidimensional
  13. Arrays: lista asociativa (hash)
  14. Control de Flujo: La sentencia if
  15. Control de Flujo: El búcle while
  16. Control de Flujo: El búcle do while
  17. Control de Flujo: El búcle for
  18. Control de Flujo: El búcle foreach
  19. Crear Funciones: básico
  20. Crear Funciones: parámetro opcional y con opciones
  21. Funciones para Strings
  22. Funciones para Arrays
  23. Buscar y reemplazar (search and replace)
  24. Leer y escribir ficheros
  25. Programación Orientada a Objetos (POO)
  26. La Herencia
  27. LWP::Simple: Obtener contenido de sitios web
  28. LWP::Simple: Encontrar-rastrear emails en la web
  29. Mechanize: Obtener links e imágenes de la web
  30. Mechanize: hack Wordpress login (fuerza bruta)
  31. Mechanize hack Joomla login (fuerza bruta)

https://www.youtube.com/watch?v=qqqY3sDnYj4&list=PLjARR1053fYmN9oYz-H6ZI1fOkrjLz6L2
manudg
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2014-06-20 19:47 @865

Publicidad

Re: Vídeo Tutorial de Perl

Notapor explorer » 2014-06-20 20:38 @901

Bienvenido a los foros de Perl en Español, manudg.

Muchísimas gracias por tu aporte. Una cosa así se echaba de menos desde hace mucho tiempo.

Una cosilla que he visto de la segunda parte... has probado en consola el ejecutable perl, y te ha dado que es la versión v5.8.8. Fíjate que esa versión es de hace ¡8 años! La que debes usar es el ejecutable que está justo al lado, el perl5.18.1, que es la versión más moderna que te has bajado (te podías haber bajado la v5.20.0, y explicar la nueva sintaxis que trae, pero bueno... la 5.18 también está bien ;) ).

Tengo más comentarios sobre tus vídeos. ¿Puedo decírtelos aquí o prefieres que sean en los comentarios de las páginas de Youtube?

Otra vez, muchísimas gracias.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Vídeo Tutorial de Perl

Notapor manudg » 2014-06-21 08:12 @383

Hola, gracias por todo. La verdad es que tienes razón sobre la versión de Perl, estaba utilizando en variables de entorno en PATH la ruta a la carpeta bin de perl en XAMPP ya que estaba haciendo cosas de CGI, luego me di cuenta y lo cambié a la carpeta bin de perl en strawberry.

Bueno, simplemente trato de dar un pequeño aporte sobre este lenguaje que me encanta, al menos, espero que sirva de ayuda a los que empiezan a programar con Perl para aprender los conceptos básicos.

Sobre los comentarios puedes publicarlos aquí en el foro. De nuevo, muchas gracias.
manudg
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2014-06-20 19:47 @865

Re: Vídeo Tutorial de Perl

Notapor explorer » 2014-06-21 12:20 @555


Parte 1:
  • Parte de la instalación de Strawberry Perl se comenta en la parte 2. Quizás debería estar aquí.

Parte 2:
  • Se comenta cómo hacer que Perl se ejecute de forma global en el sistema, añadiendo la ruta a la variable de entorno %PATH%. Yo no uso Windows, así que no estoy seguro de si eso es necesario hacerlo o no. Hace años sí que había que hacerlo, pero en los vídeos que veo en Youtube sobre la instalación de Strawberry Perl, no se destaca ese paso. Más bien, basta con cerrar la sesión actual de Windows y volver a entrar (o reiniciar completamente Windows). Eso parece que es suficiente para la instalación completa de Strawberry, y él mismo agrega su ruta al %PATH% del sistema (no al %PATH% del usuario) para que Perl sea conocido desde todas las rutas. Se puede comprobar de la siguiente manera: en un Windows que no tenga ningún Perl instalado, bajar e instalar Strawberry Perl. Reiniciar Windows. Abrir una terminal de línea de comandos CMD y ejecutar perl -v. Si responde, es que se instaló bien. Si no, entonces hacemos el paso de agregar la ruta al %PATH%. Es lo que aparece en el vídeo, pero lo que no aparece es si se reinició o no la sesión de Windows, y ese es un paso fundamental (en el reinicio de Windows es cuando se inicializan las variables de entorno del sistema, para todos los programas que se ejecutarán a continuación). Sospecho que no se reinició, y esa es la explicación por la cual aparece la versión v5.8.8 del WAMPP: se está ejecutando el perl que en ese momento sí está en la ruta %PATH%.

    Recomendación: no tener más de un intérprete Perl en el sistema, para evitar líos, salvo que sepamos qué estamos haciendo.
  • 3:06. Se comenta que la ruta para el intérprete perl en los sistemas Linux es /bin/perl, pero en realidad es /usr/bin/perl. La explicación es que perl no es considerado un comando del sistema, sino un comando agregado para ser utilizado por los usuarios (y sus programas). Sí, ya sabemos que hay distribuciones Linux que no podrían funcionar sin un intérprete de Perl. Para ellas es vital. Pero aún así, perl sigue siendo un "programa de usuario", así que debe ir en /usr/bin/.
  • 3:25. Los usuarios de Windows no necesitan poner la línea shebang. Es algo exclusivo de los sistemas Unix. Para el Perl de Windows, esa línea no es más que una línea de comentario. Podrías dejarla incluso así:

    #!Perl

    La razón por la cual luego, en la línea de comandos, puedes ejecutar programas Perl sin tener que poner el nombre del intérprete delante, es decir, en lugar de poner esto

    perl programa.pl

    puedes poner simplemente

    programa.pl

    es porque Strawberry Perl (o la distribución que sea), en el momento de la instalación, registró en (el registro de) Windows que todos los archivos que terminasen con '.pl' debían ser abiertos por el intérprete perl. Así es como funciona Windows: prestando atención a la extensión. Puedes hacer la prueba siguiente:

    move programa.pl programa._pl

    Verás que ya no puedes ejecutar programa._pl de forma directa, aún teniendo una línea shebang con la ruta correcta, pero sí de esta forma:

    perl programa._pl

    Eso demuestra que la línea inicial no tiene significado en Windows (es un comentario) y que lo importante es la extensión.
  • 7:30. En Perl, no existen constantes. Existen... variables de solo lectura :) , que es justo lo que hace el módulo constant. Bueno, a efectos prácticos, podemos decir que sí, que hay constantes. Si ejecutas perldoc constant, verás que Perl sí le da la categoría de existencia a las constantes.
  • 7:50. Está bien explicar el uso de los finales de línea "\n", pero al final, cuando son muchas líneas las que tenemos que escribir así, se vuelve muy engorroso y largo. Es más cómodo explicar desde un principio el método say(), dejando bien claro que es igual que el print(), salvo que nos ahorra tener que poner el final de línea constantemente.
  • 8:05. ¿Sabías que la ventana de comandos de Windows tiene histórico de comandos? Así te ahorras tener que escribir los comandos que ya has ejecutado antes. Basta con dar a la tecla fecha arriba para ir viendo los comandos anteriores. Lo digo porque así no tienes que escribir tanto :) Y se comenten menos equivocaciones.

Parte 3
  • 0:24. Este es un fallo grave. Los tipos de datos que hay en Perl son solo tres: escalares, array y hash. No hay más. No hay variables de tipo cadena de caracteres. No hay variables de tipo numérico. No. Nada de eso. Tienes más información en tu propio ordenador en perldoc perldata, y en la Web (traducido al español).
  • 2:45. El proceso que realizan las comillas dobles, de interpretar el contenido, se llama 'interpolación'. De esa manera, decimos que «podemos poner variables y caracteres de escape dentro de comillas dobles para que "sean interpoladas" a sus contenidos reales».
  • 5:52. Lo dicho antes: no existen las variables de tipo entero. Solo las escalares. Dices que se puede poner cualquier valor en la variable de tipo entero "mientras no sea decimal". Te aseguro que sí puedes hacerlo ;)
  • 6:10. El punto decimal viene derivado de la notación anglosajona. El caso es que, desde diciembre de 2010, la RAE recomienda que a partir de ese momento nos acostumbremos a escribir la parte decimal de esa manera, en castellano, en "pro de una unificación de reglas". Así que ya podemos decir que en Perl se puede escribir la notación de punto flotante igual a como se escribe en los textos normales.
  • 6:45. Octal y hexadecimal no son tipos de datos, sino notaciones numéricas. En perldoc perlnumber, (en la Web) (traducido al español) tienes todas las combinaciones que permite Perl.

Parte 4:
  • 0:36. La partición de operadores que hay en perlop es distinta, pero bueno, puede valer. De todas maneras, el operador '.' y 'x' no son, estrictamente, aritméticos :)

Parte 5:
  • 0:45. Error grave. Se indica que "podemos usar cualquiera de los dos signos" para hacer la comparación", y que cada operador tiene "su palabra clave". Bueno, pues resulta que los operadores que salen a la izquierda son los comparadores numéricos, mientras que los que están a su derecha son los comparadores alfanuméricos. No son lo mismo. Y los segundos no son las palabras clave de los primeros. Sus misiones son bastantes distintas, según los tipo que queramos comparar. Aunque 3 == 3 da el mismo resultado que 3 eq 3 y que '3' eq '3', en otras ocasiones no. Por ejemplo, si comparamos 3 == '3º' nos dice que es verdadero, pero 3 eq '3º', no.

    El porqué funciona en algunos casos, es porque Perl, al ver un operador numérico, realiza previamente una conversión numérica. En el caso del operador alfanumérico, no se realiza esa conversión (bueno, hace una conversión a cadena si los operandos son numéricos). Hay que prestar atención a lo que pueden contener los operandos, para usar un tipo de operador u otro.
  • 2:22. Creo que Windows tiene autocompletado de comandos. Prueba a pulsar el tabulador después de escribir dos o tres caracteres del inicio del comando que quieres ejecutar. Por ejemplo, en ese momento, hubiera escrito "opera" y pulsado la tecla del tabulador. Windows completaría el nombre del comando, si está en su ruta.
  • 2:40. Ya hemos dicho que 'eq' no es lo mismo que '=='. Si sí funciona tu ejemplo, es porque Perl realiza una conversión previa a cadena de caracteres de las dos variables, y en este caso, coincide que sí son iguales.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Vídeo Tutorial de Perl

Notapor explorer » 2014-06-21 12:49 @576


Parte 6:
  • 0:05. Las expresiones regulares se suelen usar para bastante más que validar entradas, pero bueno, es una forma de comenzar.
  • 1:57. Los patrones de expresiones regulares forman su propio lenguaje, entonces, "no existen" las expresiones regulares, sino que se crean o conforman. Otra cosa es que se sepa cómo construirlas.
  • 3:10. Con '[email protected]' también hubiera fallado... y es una dirección válida :twisted:

Parte 7:
  • Al igual que en la parte de operadores de comparación, aquí hay dos familias de operadores lógicos distintos, que, aparentemente, hacen lo mismo. && hace lo mismo que and. || hace lo mismo que or. Y ! hace lo mismo que not. Pero... la diferencia es la precedencia... los operadores and, or y not tienen un nivel de precedencia muy bajo (digamos que son casi lo último en ejecutarse en la sentencia) lo cual les hace idóneos para crear condiciones. En cambio, no son adecuados para los cortocircuitos. Ejemplo: no es lo mismo escribir

    my $c = $a || $b;

    que

    my $c = $a or $b;

    En el segundo caso, es como si hubiéramos escrito

    (my $c = $a) or $b;

Parte 8:

Parte 9:
  • El uso de STDIN es tan normal, que suele abreviarse. Así que '<STDIN>' se suele escribir como '<>' (también llamado 'operador diamante').
  • Queda una cosa por explicar: la suma se puede realizar aunque las variables contengan los caracteres de fin de línea, porque Perl al ver el operador de suma, convierte antes sus contenidos a números. Quizás quedaría más claro si se colocasen los chomp() justamente después de leer las entradas por el teclado.

Parte 10:
  • 0:34. Aquí hay un pequeño error ortográfico. Pone '$ARGV es un array especial'. Se tenía que haber escrito con una '@' en lugar de con un '$'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Vídeo Tutorial de Perl

Notapor explorer » 2014-06-21 12:56 @580


Parte 11:
  • 0:25. Error grave. Un array no es una lista. Una lista no es un array. Ergo un array no es lo mismo que una lista. Un array es una variable que almacena una lista de elementos. Esto es una lista:

    (1,2,3,78,'abuela')

    Y esto es un array:

    @cajón_de_sastre

    Ya vemos que son muy distintos :).
  • 2:42. Muy acertado: necesitamos usar el sigilo '$' porque vamos a obtener un valor escalar (un solo valor).

Parte 12:
  • 1:15. No está claro por qué necesitamos usar corchetes para crear las listas multidimensionales. La explicación es porque al poner corchetes estamos creando array anónimos (sin nombre), y lo que estamos guardando en ese lugar es un valor escalar, que es la referencia a ese array anónimo. Naturalmente, esta explicación es confusa para quien está empezando, pero debería ser conocida para los programadores que conocen el concepto de punteros o referencias a estructuras de datos.

    Más información en tu propio ordenador en perldoc perldsc, y en la Web (traducido al español).

    Más información en tu propio ordenador en perldoc perllol, y en la Web (traducido al español).

    Más información en tu propio ordenador en perldoc perlref, y en la Web (traducido al español).

Parte 13:

Parte 14:

Parte 15:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Vídeo Tutorial de Perl

Notapor explorer » 2014-06-21 13:52 @619

Parte 16:
  • El bucle do-while(), realmente no es igual al bucle while(). En realidad, se trata de la construcción do BLOQUE seguida del modificador de sentencias while(). La prueba es que dentro del BLOQUE no se pueden usar las sentencias next y last como sí se puede hacer en un bucle while() normal.

    En base a esto, si el while() que ponemos al final se trata de un modificador, su condición debería probarse antes de la primera ejecución del bloque do{}, pero... y aquí viene una de las excepciones de este dichoso-lenguaje-nada-cartesiano :) : que el bloque do{} es ejecutado al menos una vez antes de probar por primera vez la condición del while().

    Todo este jaleo para imitar el funcionamiento de do-while() de otros lenguajes.

    Lo dicho aquí también vale para do-until().

    Más información en tu propio ordenador en perldoc perlsyn, y en la Web (traducido al español). Información sobre do{} en perldoc -f do.

Parte 17:

Parte 18:
  • La palabra clave 'foreach' en realidad es un sinónimo de la palabra clave 'for', así que se pueden usar de forma indistinta. (Obviamente, 'for' es más corta ;) )

Parte 19:
  • La nueva sintaxis de Perl v5.20 es mucho más atractiva :)

Parte 20:
  • Existe un operador en Perl moderno que equivale al bucle if() que pones entre las líneas 9 y 12: el defined-or // (más información en perldoc perlop) Quedaría

    $opcional = $opcional // 5;

    o de forma abreviada

    $opcional //= 5;
  • 5:40. Está muy bien explicado el cómo tener una serie de valores por defecto dentro de una subrutina o función. Como añadido, comentar que una vez vi un método abreviado en uno de los módulos que encontré en CPAN, y me llamó la atención por la simpleza de su funcionamiento. Quedaría así:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. sub imagen {
    2.     my %opciones = (
    3.         anchura     => 250,
    4.         altura      => 250,
    5.         color_fondo => 'negro',
    6.         @_                              # truco
    7.     );
    8.  
    9.     ...;
    10. }
    Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
    Esto funciona de la siguiente manera: estamos inicializando el hash %opciones. Primero, le metemos los pares clave-valor por defecto (por estar primeros en la definición), y luego, metemos los pares clave-valor que nos pasa el usuario. Esto tiene el efecto de que las claves que pasa el usuario sobreescribe a las mismas claves metidas antes, actualizando los valores (las claves, en un hash, son únicas).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Vídeo Tutorial de Perl

Notapor explorer » 2014-06-21 14:50 @660

Parte 21:
  • 0:45. Realmente no estamos eliminando caracteres extraños, sino que estamos sacando los caracteres en la codificación en la que está trabajando la ventana de línea de comandos de Windows. Como está simulando una vieja terminal MSDOS, hay que usar una codificación de caracteres cp850. Lo más probable es que estés editando tus programas en un Windows con soporte de Unicode (más bien UTF-16). En esa codificación, los primeros caracteres "normales" coinciden con la anciana codificación cp850, pero no así los caracteres tildados o "especiales". Por eso vemos caracteres extraños.

    Si, en lugar de usar un editor en Windows, usaras un editor dentro de la propia ventana del CMD, no tendrías que hacer esto. Pero claro, nadie usa ya editores de texto en modo MSDOS :D
  • 7:05. En la descripción de substr, cambiar "final" por "longitud" o "largo".
  • Si se explicó index() también se pudo explicar rindex() ;)

Parte 22:
  • 3:11. split() no convierte el resultado en un array, si no en una lista de elementos. Ya hemos visto antes que son cosas distintas.

Parte 23:
  • 0:16. Sí que existe una función en Perl para buscar una cadena y hacer una sustitución... la que comentas a continuación :D El operador sustitución s///.
  • 7:30. El ejemplo de sustitución de las vocales es un trabajo perfecto para el operador de transliteración tr///.

Parte 24:

Parte 25:
  • Aunque la programación orientada a objetos (POO) en Perl, tiene unas bases sencillas, es recomendable usar las facilidades de Moose. Tanto es así, que se han eliminado todos los tutoriales de POO de la documentación básica de Perl (perlboot, perltoot, perltooc y perlbot), y solo queda perlootut (en la Web) (traducido al español) y perlobj (y en la Web) (traducido al español).
  • 1:00. La creación de módulos se describe en perldoc perlmod (y en la Web) (traducido al español).
  • 8:54. El '1;' del final no marca la terminación del módulo. Lo que pasa es que Perl, cuando carga un módulo, lo ejecuta, y lo admite dentro del programa solo si la última sentencia válida que ejecutó en el módulo devuelve un valor verdadero. Por eso, la inmensa mayor parte de los módulos terminan de esa manera, ya que realmente no hay código ejecutable en un módulo (hasta que es llamado externamente por el programa). El elegir '1' como valor de verdad es solo una convención, pero podría ser cualquier otra cosa que sea un valor de verdad, como por ejemplo, una cadena de caracteres.
  • 9:50. No es recomendable el uso de la notación indirecta (poner new delante del nombre de la clase). Esto podría desaparecer en futuras versiones de Perl. Lo mejor es como se indica en el momento 12:00.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Vídeo Tutorial de Perl

Notapor explorer » 2014-06-21 19:20 @847

Parte 26:
  • 1:07. Hoy en día, en lugar de usar el array especial @ISA, hay que usar el pragma parent (ver perldoc parent):

    use parent 'Empleado';
  • 7:00. Si accedes directamente a las propiedades de un objeto, eliminas la característica de encapsulación de la programación orientada a objetos. Es mejor usar siempre accesores a las propiedades y métodos de los objetos.
  • 8:43. El error dice que no puede trasladar el signo a alguno de los caracteres de la codificación cp850. Si no se quiere cambiar de codificación, pues se utiliza la letra 'E', por ejemplo, o la solución que adoptaste, de poner 'euros'. Otra opción es la de cambiar a otra codificación. Por ejemplo, en la cp437, hay una letra en la posición 0xEE.

Parte 27:
  • 1:35. No es necesario llamar a get() indicando toda la ruta de clases a la que pertenece. Su espacio de nombres es importado por LWP::Simple de forma automática.

Parte 28:
  • ¿Buscar direcciones de correo en una página? Puede valer como ejemplo de exp. reg. y demás, o como escribir en archivos, pero suena a desagradable (así trabajan los spammers).
  • 2:43. ¿Para qué grabar la página obtenida y volverla a leer si ya la tenemos almacenada en la variable $content.

Parte 29:

Parte 30:
  • ¿Hackear un Wordpress? Vamos de mal en peor :( Este tutorial está empezando a perder mi interés.

Parte 31:
  • ¿Ataque a un Joomla? Esto ya no me interesa... ¡Vaya fama le has dado a nuestro querido lenguaje! :cry:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Vídeo Tutorial de Perl

Notapor manudg » 2014-06-22 07:55 @371

Hola, he estado viendo el análisis que has realizado a cada uno de los capítulos y la verdad es que me he quedado impresionado :shock: Me ha servido para aprender más sobre Perl. Cuando un profesional analiza lo que haces y ves esos errores que has cometido, te das cuenta de que hay mucho por aprender y que Perl es un lenguaje muy sofisticado y que hay que estudiar su estructura minuciosamente. Poco más puedo decir que intentaré mejorar y estudiar la teoría y la práctica con más detalle. Gracias, y un saludo :)
manudg
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2014-06-20 19:47 @865


Volver a Formación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado