Archivado en: ‘Perl’ .

Mi primer programa: Hola Mundo!

16 Julio, 2008

De todos es sabido que cuando comienzas a programar un lenguaje el primer programa que se realiza es el “Hola Mundo!” para comprobar como compilar y como funciona más o menos el interfaz de desarrollo. Me he encontrado en Wikipedia un Hola Mundo en muchisimos por no decir casi todos los lenguajes de programación.

http://es.wikipedia.org/wiki/Hola_mundo

Así podréis comprobar si está el lenguaje que vosotors utilizais o comprobar la sintaxis de lenguajes a los que os gustaría echarles el guante ^_^

Hola Mundo!

Programando un Spider en Perl

24 Enero, 2008

Últimamente cuando dispongo de tiempo (algo raro últimamente) me he aficionado por indagar en Perl. Es un lenguaje que siempre me ha gustado y aunque mucho opinen que está obsoleto sigo creyendo que este lenguaje tiene mucho potencial que ofrecer, la comunidad que se mueve entorno a él es muy grande.

Hace ya unos meses me surgió la idea de hacer un programa para utilizarlo como tester de carga de usuarios simultáneos para una web, para testear su comportamiento/rendimiento y lo que en un principio pretendía ser un programa malicioso... ya que se podría usar para fines no muy éticos, dio un giro según iba investigando.

Perl lo he utilizado a nivel profesional para ocasiones muy puntuales y no he tenido la oportunidad de hacer un "programa" en condiciones.

El código que abajo os dejo tampoco es una maravilla, pero es algo que hice probando "el año pasado" el intento de hacer un Spider. Está muy verde y no se cuando volveré a disponer del tiempo y las ganas suficientes como para investigar después de la jornada de trabajo. Pero aquí os dejo un fragmeto que puede iniciar a los no muy decididos o principiantes sobre este lenguaje.

PERL:
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use LWP::UserAgent;
  4. use HTTP::Request;
  5.  
  6. my $url = "http://www.google.com";
  7.  
  8. &webFlood($url);
  9.  
  10. sub webFlood {
  11. my ($url) = @_;
  12.  
  13. my $html = &leerUrl($url);
  14.  
  15. my @enlaces = &buscarLink($html);
  16.  
  17. my $contador = @enlaces;
  18.  
  19. if($contador> 0){
  20. foreach(@enlaces){
  21. my $link = $_;
  22. print ("\n[ Url ] ".$link);
  23. &webFlood($link);
  24. }
  25. }else{
  26. return(0);
  27. }
  28. }
  29.  
  30. print("\n");
  31.  
  32. sub leerLinks {
  33.  
  34. #my ($url) = @_;
  35. #my $html = &leerUrl($url);
  36. my (@links) = @_;
  37. my $html;
  38. my @enlaces;
  39. my $i = 0;
  40. foreach (@links) {
  41. print "\n url: " . $_;
  42. my $link = $_;
  43.  
  44. #print( "   [Link] " . $link . "\n" );
  45. $html = &leerUrl($link);
  46. $enlaces[$i] = &buscarLink($html);
  47. $i++;
  48. }
  49. return @enlaces;
  50. }
  51.  
  52. sub leerUrl {
  53. my ($url) = @_;
  54.  
  55. my $ua = LWP::UserAgent->new;
  56. $ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000; DigExt)");
  57.  
  58. my $req = HTTP::Request->new( GET => $url );
  59.  
  60. my $response = $ua->request($req);
  61.  
  62. return $response->content;
  63. }
  64.  
  65. sub buscarLink {
  66. my ($html) = @_;
  67. my @links;
  68. my $i = 0;
  69. while ( $html =~ /href="(.*?)".*?>/isg ) {
  70. $links[$i] = ($1);
  71. $i++;
  72. }
  73. return @links;
  74. }

Lo que haces es leer una URL y del HTML que recoge coge solo el contenido de los href. Obviamente como ya sabréis, no todos los href son enlaces. Falta mucho que depurar pero es un buen pasatiempo cuando se tiene la mente descansada. Cuando le haga algún cambio os lo publico.

Si os surge alguna duda sobre algo del código siempre podéis comentar :-)

Envío de correo electrónico con Perl

16 Diciembre, 2007

Función para enviar un correo electrónico con Perl:

PERL:
  1. #!/usr/bin/perl -w
  2. sub smtp {
  3.  
  4. use Email::MIME::Creator;
  5. my ( $To, $FromName, $FromMail, $Bcc, $Subject, $msg_html ) = @_;
  6.  
  7. my @html = $msg_html;
  8.  
  9. # mensaje multipart
  10. my @parts = (
  11. Email::MIME->create(
  12. attributes => {
  13. content_type => "text/html; charset=iso-8859-1",
  14. encoding => "quoted-printable",
  15. },
  16. body => "@html",
  17. ),
  18. );
  19.  
  20. # Declaramos al sender y adjuntamos los archivos a enviar
  21. my $email = Email::MIME->create(
  22. header => [ From => "$FromName <$FromMail>" ],
  23. parts => [ @parts ],
  24. );
  25.  
  26. # modificamos nuestro encabezado
  27. $email->header_set( "MIME-Version: 1.0\r\n" );
  28. $email->header_set("Content-type: text/html; charset=iso-8859-1\r\n");
  29. $email->header_set( 'X-PoweredBy' => 'v3.0' );
  30. $email->header_set( To => "$To" );
  31. $email->header_set( Bcc => "$Bcc" );
  32. $email->header_set( Subject => "$Subject" );
  33.  
  34. # modificaciones avanzadas, elegimos base64 o bien 7bit para aceptar multipart
  35. #$_->encoding_set( 'base64' ) for $email->parts;
  36.  
  37. # Accesamos al binario de sendmail y enviamos los mensajes
  38. open (MAIL, "|/usr/sbin/sendmail -t") || die "No hay acceso al binario sendmail\n";
  39. #open (MAIL, "|/usr/sbin/postfix") || die "No hay acceso al binario sendmail\n";
  40. print MAIL $email->as_string;
  41. }

Para usar la función:

PERL:
  1. &smtp($vTo, $vFromName, $vFromMail, $vBcc, $vSubject, $vmsg_html );

Módulo de Perl para usar Festival

13 Diciembre, 2007

Entre que ando probando Perl e indagando sobre Festival me he encontrado un módulo de Perl para usar Festival.

Podéis encontrar más información aquí.

Descargar módulo speech festival para perl.

Editor para Perl

13 Diciembre, 2007

eclipse_home_header.jpgGracias a nuestro amigo Eclipse un editor que tiene plugins para todo podemos instalar otro plugin que nos es de gran utilidad para trabajar con este lenguaje, Perl.

Así nos dejamos de utilizar editores de consola que aunque rápidos, no nos ofrecen el interface de desarrollo que nos puede llegar a ofrecer este programa.

Descargar Eclipse

Plugin Perl para Eclipse

Web Flood básico en Perl

12 Diciembre, 2007
PERL:
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use CGI::Carp qw(fatalsToBrowser);
  5.  
  6. use LWP::UserAgent;
  7. use HTTP::Request;
  8.  
  9.  
  10. my $i;
  11.  
  12. for($i=0;$i<10;$i++){
  13.     print("\n============== [ ".($i+1)." ] Resultado ========================\n");
  14.     &leerUrl;
  15. }
  16. print("\n");
  17.  
  18. sub leerUrl{
  19.  
  20.     my $ua = LWP::UserAgent->new;
  21.     $ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000; DigExt)");
  22.  
  23.     my $url = "http://google.com/";
  24.  
  25.     my $req = HTTP::Request->new(GET => $url);
  26.  
  27.     my $i;
  28.     my $ahora = time();
  29.  
  30.     for($i=0;$i<10;$i++){
  31.         my $response = $ua->request($req);
  32.         if($response){
  33.             my $demora = time() - $ahora;
  34.             print( "\n [ ".($i+1)." ] Respuesta recibida  ".$url." en ".$demora." sec." );
  35.             $ahora = time();
  36.         }
  37.     }
  38.     print("\n");
  39. }

Lenguaje Perl, ese gran desconocido

12 Diciembre, 2007

Perl es un lenguaje de programación que actualmente está algo "obsoleto" por "las nuevas generaciones" de programadores. Yo lo conocí en la época de las páginas dinámicas con cgi's en donde crear una web con base de datos era un esfuerzo horrendo. Se podía programar con Perl o con C un cgi (por lo menos lo que yo conocí) y ahora años más tarde intento rescatar y mejorar conocimientos sobre un lenguaje que aunque no parece ser puntero, tiene fama de tener buen rendimiento.