• Publicidad

Tutorial Retro

Aprende Perl

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-26 06:29 @312

EJERCICIO 6.2

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use autodie;
  5.  
  6. my $url;
  7.  
  8. open( my $IN,  "<", "../ficheros/urls.txt" )     or die "no existe el fichero de entrada";
  9. open( my $OUT, ">", "../ficheros/htmlurls.txt" ) or die "no existe el fichero de salida";
  10.  
  11. while (<$IN>) {
  12.  
  13.     ($url) = /([w]+\.[a-zA-Z]+\.[a-z]+)/;
  14.  
  15.     print $OUT "<a href=$url>$url</a> \n";
  16.  
  17. }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Publicidad

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-27 02:40 @152

EJERCICIO 6.3

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use autodie;
  5.  
  6. my $libreria;
  7.  
  8. $ARGV[0] || die "falta fichero como parámetro";
  9.  
  10. while (<>) {
  11.  
  12.     ($libreria) = /([#]\S[include]+\s\<[a-zA-Z]+\.[h]\>)/;
  13.  
  14.     if ( defined $libreria ) { print $libreria. "\n" }
  15.  
  16. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-08-27 04:57 @248

EJERCICIO 6.4 (VERSIÓN 1 => SOLO PINTA LA INSTRUCCIÓN DEL FOR PERO NO EL CUERPO)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use autodie;
  5. my $codigo;
  6.  
  7. $ARGV[0] || die "falta fichero como parametro";
  8.  
  9. while (<>) {
  10.  
  11.     ($codigo) = /([for]+\s?\((\$[a-z]+)(.)+)/;
  12.  
  13.     if ( defined $codigo ) {
  14.         print $codigo. "variable que usa " . $2 . "\n";
  15.  
  16.     }
  17. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


VERSIÓN 2 => PINTA EL CUERPO ENTERO PERO SÓLO CON LOS BUCLES FOR QUE NO TENGA MÁS INSTRUCCIONES QUE IMPLIQUEN ABRIR Y CERRAR)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use autodie;
  5. my @codigo;
  6. my $clave;
  7. my $contador;
  8. my $inicio;
  9. my $fin;
  10. my $variable;
  11.  
  12. $ARGV[0] || die "falta fichero como parámetro";
  13.  
  14. while (<>) {
  15.     $codigo[$.] = $_;
  16. }
  17.  
  18. foreach my $linea (@codigo) {
  19.  
  20.     if ( $linea =~ /([f][o][r]+\s?\((\$[a-z]+)(.)+)/ ) {
  21.         $inicio   = $contador;
  22.         $variable = $2;
  23.     }
  24.  
  25.     if ( $linea =~ /(\})/ && $contador > $inicio ) {
  26.         $fin = $contador;
  27.     }
  28.  
  29.     $contador++;
  30. }
  31.  
  32. for ( my $i = $inicio; $i <= $fin; $i++ ) {
  33.  
  34.     print $codigo[$i] . "\n";
  35.  
  36. }
  37. print "variable que usa: $variable \n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-09-01 01:02 @084

EJERCICIOS 7

1- Usando el módulo Benchmark, medir cuánto tarda en ejecutarse el código anterior. Programar también una petición similar para otro buscador y comparar ambos resultados.

2- Localizar una librería que sirva para hacer gráficos bidimensionales en Perl (pista: es parte de la jerarquía Chart), y usarla para hacer el histograma que se propuso en el tercer ejercicio del bloque segundo.
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-09-08 02:04 @128

EJERCICIO 7.1

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use LWP::Simple;
  4. use URI::Escape;
  5. use Benchmark;
  6.  
  7. my $codedQuery = uri_escape("Señor X");
  8.  
  9. my $url = "https://es.search.yahoo.com/search?p=$codedQuery&fr=yfp-t&fp=1&toggle=1&cop=mss&ei=UTF-8";
  10. print "Conectando a $url\n";
  11.  
  12. my $tiempo_inicial = new Benchmark;
  13. my $respuesta      = LWP::Simple::get($url);
  14. my $tiempo_final   = new Benchmark;
  15. my $tiempo_total   = timediff( $tiempo_final, $tiempo_inicial );
  16. my ($encontrados) = ( $respuesta =~ /(\d+?\,*\d+\,*\d+\,*\d*)\sresultados/gs );
  17.  
  18. my $url2
  19.     = "https://www.bing.com/search?q=$codedQuery&form=QBLH&sp=-1&pq=$codedQuery&sc=8-7&qs=n&sk=&cvid=0FE3398750E643B6B3E21D42F8DE8AC4";
  20. print "Conectando a $url2\n\n\n";
  21.  
  22. my $tiempo_inicial2 = new Benchmark;
  23. my $respuesta2      = LWP::Simple::get($url2);
  24. my $tiempo_final2   = new Benchmark;
  25. my $tiempo_total2   = timediff( $tiempo_final2, $tiempo_inicial2 );
  26. my ($encontrados2) = ( $respuesta2 =~ /(\d+?\.*\d+\.*\d+\.*\d*)\sresultados/gs );
  27.  
  28. print "Encontradas en yahoo $encontrados respuestas tiempo transcurrido" . timestr($tiempo_total) . "\n";
  29. print "Encontradas en bing $encontrados2 respuestas tiempo transcurrido" . timestr($tiempo_total2) . "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-09-15 00:52 @078

7.2 Uso VS::Chart que aunque creo que hay módulos mejores, me da la sensación que la idea original del ejercicio era con ese módulo, también añado subrutinas ya que se toca en esa parte del tutorial.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use Data::Dumper;
  5. use VS::Chart;
  6.  
  7. my $entrada;
  8. my @grafica;
  9. my $total;
  10. my @v;
  11. my $valor;
  12. my $mayor;
  13. my @lineas;
  14.  
  15. #creo la subrutina que pinta el gráfico
  16.  
  17. sub pintar ()
  18. {
  19.  
  20.     my $chart = VS::Chart->new(line_width => 10);  #creo el gráfico
  21.     @v=@_;
  22.  
  23. #recorro el array para saber qué línea tiene el mayor número y así pintar tantas veces la línea como valores tenga; si no tiene valores meto undef para parar la línea.
  24.  
  25.     foreach $valor (@v) {
  26.  
  27.         if ($mayor < $valor) {$mayor=$valor;}
  28.  
  29.     }
  30.  
  31.  
  32.     for (my $i=0;$i<=$mayor;$i++){
  33.    
  34.          if ($v[0]<$i){
  35.              $lineas[0]=undef;
  36.             } else  {$lineas[0]=10;}
  37.  
  38.         if ($v[1]<$i){
  39.              $lineas[1]=undef;
  40.             } else  {$lineas[1]=30;}
  41.    
  42.         if ($v[2]<$i){
  43.              $lineas[2]=undef;
  44.             } else  {$lineas[2]=50;}
  45.    
  46.          if ($v[3]<$i){
  47.              $lineas[3]=undef;
  48.             } else  {$lineas[3]=70;}
  49.        
  50.         if ($v[4]<$i){
  51.              $lineas[4]=undef;
  52.             } else  {$lineas[4]=90;}
  53.  
  54.     $chart->add(@lineas);  #añado los valores al gráfico, cada valor del array es una línea y cada iteración del bucle un valor nuevo de cada línea.
  55.  
  56. }
  57.  
  58. #Doy valor al "eje y"
  59. $chart->set("max" => 100);
  60. $chart->set("min" => 0);
  61. $chart->render(type => 'line', as => 'png', to => 'grafico_promedio.png'); #creo el gráfico
  62.  
  63.  
  64. }
  65.  
  66. ################################################################### FIN SUBRUTINAS #########################################################################################3
  67. #Pido, recojo y saco el promedio de los números por teclado
  68.  
  69. print "introduce números de 0 a 100, cuando no introduzcas nada saldrá la gráfica\n";
  70.  
  71. until (0)
  72. {
  73.  
  74.     chomp($entrada=<STDIN>);
  75. last if !$entrada;
  76.     if ($entrada <= 20 && $entrada > 0) {$grafica[0]++;}
  77.     if ($entrada <= 40 && $entrada > 20) {$grafica[1]++;}
  78.     if ($entrada <= 60 && $entrada > 40) {$grafica[2]++;}
  79.     if ($entrada <= 80 && $entrada > 60) {$grafica[3]++;}
  80.     if ($entrada <= 100 && $entrada > 80) {$grafica[4]++;}
  81.     $total++;
  82.  
  83.  
  84. }
  85.  
  86. for (my $i=0;$i<=($#grafica);$i++)
  87. {
  88.  
  89.     $grafica[$i]=($grafica[$i] / $total)*100;
  90.  
  91. }
  92.  
  93.  
  94.  
  95. &pintar (@grafica);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-10-25 11:44 @531

Siguiendo lo que queda pendiente añado este comentario sobre conexiones y operaciones a base de datos.
Uso como ejemplo una base de datos sencilla que se puede crear asi:
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
  1. CREATE TABLE `coches` (
  2.   `marca` varchar(100) NOT NULL,
  3.   `modelo` varchar(100) NOT NULL,
  4.   `matricula` text NOT NULL,
  5.   `color` varchar(100) DEFAULT NULL,
  6.   `id` int DEFAULT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  8.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y aquí el programa que consulta , inserta, modifica y elimina tuplas de la tabla, es muy sencillo y sirve de base para aprender:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3.  
  4. use strict;
  5. use DBI;
  6. use Term::ReadKey;
  7.  
  8. my $usuario;
  9. my $pass;
  10. my $conexion;
  11. my $consulta;
  12. my $marca;
  13. my $modelo;
  14. my $matricula;
  15. my $color;
  16. my $id;
  17. my $entrada;
  18. my $sth;
  19. my $consulta;
  20. my $datosentrada;
  21.  
  22. #########
  23. # $conexion === variable que utilizamos para establecer la conexion con bd.
  24. # $consulta === variable que utilizamos para guardar la consulta SQL.
  25. # $sth === objeto a modulo dbi
  26.  
  27. print "introduzca su usuario: ";
  28. chomp($usuario=<STDIN>);
  29. print "introduzca su contraseña: ";
  30. ReadMode(4);            # lo uso para que no se muestre la contraseña por pantalla.
  31. chomp($pass=<STDIN>);
  32. ReadMode(0);            # vuelvo a poner el modo normal para que se vea por pantalla lo que se escribe.
  33.  
  34.  
  35. #iniciamos conexion con bd
  36.  
  37. $conexion=DBI->connect("DBI:mysql:host=localhost;database=concesionario",$usuario,$pass,{RaiseError => 1, PrintError => 0});
  38.  
  39.  
  40. do {
  41.     print "\n";
  42.     print "CONSULTAR tabla pulse 1 \n";
  43.     print "INSERTAR datos pulse 2 \n";
  44.     print "MODIFICAR datos pulse 3\n";
  45.     print "BORRAR datos pulse 4\n";
  46.     print "SALIR pulse 0\n";
  47.  
  48.     $entrada=<STDIN>;
  49.  
  50.  
  51.  
  52.  
  53. if ($entrada==1){
  54. #CREANDO CONSULTA
  55.  
  56. $consulta= qq {SELECT * FROM concesionario.coches};
  57.  
  58. #PREPARANDO CONSULTA
  59.  
  60. if ($entrada==1){
  61. $sth=$conexion->prepare($consulta);
  62. $sth->execute();   #EJECUTAMOS CONSULTA
  63.  
  64.  
  65. #ASIGNAMOS VALORES DE LA CONSULTA A VARIABLES Y RECORREMOS LOS RESULTADOS
  66.  
  67. while(($marca, $modelo, $matricula, $color, $id)=$sth->fetchrow_array())
  68. {
  69. print "$marca, $modelo, $matricula, $color, $id \n";
  70.  
  71. }
  72.  
  73. }
  74. }
  75.  
  76.  
  77. #INSERTAMOS UNA NUEVA LINEA
  78.  
  79. if ($entrada==2){
  80.  
  81.  
  82. print "introduce marca modelo matricula y color (Ejemplo OPEL CORSA 1234ZXC ROJO)\n";
  83. $datosentrada=<STDIN>;
  84.  
  85. ($marca,$modelo,$matricula,$color)=($datosentrada=~/([a-zA-Z]+)\s?([a-zA-Z]+)\s?(\d+[A-Z]*)\s([a-zA-Z]+)/);
  86. $consulta = qq {INSERT INTO concesionario.coches (marca, modelo, matricula, color, id) VALUES('$marca', '$modelo', '$matricula', '$color', '0');
  87. };
  88. $sth=$conexion->prepare($consulta);
  89. $sth->execute();
  90.  
  91. }
  92.  
  93. ##ACTUALIZAMOS UNA LINEA
  94.  
  95.  
  96. if ($entrada==3){
  97.  
  98.     print "introduce la linea entera que quieres cambiar (marca modelo matricula color) \n";
  99.     $datosentrada=<STDIN>;
  100.     print "introduce la nueva linea:\n";
  101.     my $datosentrada2=<STDIN>;
  102.  
  103.     ($marca,$modelo,$matricula,$color)=($datosentrada=~/([a-zA-Z]+)\s?([a-zA-Z]+)\s?(\d+[A-Z]*)\s([a-zA-Z]+)/);
  104.     my($marca2,$modelo2,$matricula2,$color2)=($datosentrada2=~/([a-zA-Z]+)\s?([a-zA-Z]+)\s?(\d+[A-Z]*)\s([a-zA-Z]+)/);
  105.  
  106.     $consulta = qq{UPDATE concesionario.coches SET marca='$marca2', modelo='$modelo2', matricula='$matricula2', color='$color2' WHERE marca='$marca' AND modelo='$modelo' AND matricula='$matricula' AND color='$color'};
  107.    $sth=$conexion->prepare($consulta);
  108.     $sth->execute();
  109. }
  110.  
  111. ##BORRAR LINEA SEGUN MATRICULA
  112. if ($entrada==4){
  113.  
  114. print "Introduce la matricula del coche que quieres borrar: \n";
  115. $matricula=<STDIN>;
  116. print $matricula;
  117. $consulta=qq{DELETE FROM concesionario.coches WHERE matricula='$matricula';};
  118. $sth=$conexion->prepare($consulta);
  119. $sth->execute();
  120.  
  121. }
  122.  
  123. if ($entrada==0){ $conexion->disconnect();}
  124.  
  125. }while ($entrada!=0);
  126.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Anterior

Volver a Formación

¿Quién está conectado?

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

cron