Articulos Politicos mas Recientes:
15/03/2019 A falta de luto, bueno es el pánico (por Enrique G. Avogadro) :::

09/03/2019 PAD Invitacion a la presentación (por Enrique G. Avogadro)


02/03/2019 Finalmente los largos (por Enrique G. Avogadro) :::

.. ..

PERL

El uso de los módulos

 

by alfi

 

Para que escribir una rutina cada vez que la necesitamos, si podemos hacerlo una sola vez y luego invocarla (llamarla) ?

Para eso están los módulos, que en PERL se los reconoce por su extensión, como por ejemplo cgi.pm. La extensión pm está indicándonos que se trata de un módulo.

 

Por ejemplo, si estuviéramos haciendo un script, y en una parte del mismo necesitamos que a cada variable se le saquen los espacios vacíos (caracter 32 en ASCII) situados delante y detrás de la palabra, pero no entre medio de las palabras.

 

Para más claridad, si tuvieramos la variable:

 

  $idea="   tengo que sacar los espacios    ";

 

y desearíamos que quedase:

 

  $idea="tengo que sacar los espacios";

 

Para ello, podemos crear nuestro propio módulo, por ejemplo modulo.pm y allí vamos introduciéndole funciones que nos sean útiles. Acá va escrito el módulo completo. copialo y dale el nombre modulo.pm y subilo al directorio cgi-bin del servidor y cambiale los permisos.

 

# modulo.pm
## éste módulo hace trim, o sea quita espacios antes y despues del texto ## pero no entre medio

sub trim_izq{  ## apertura de la subrutina
 $largo=length($idea); ## mide el largo de la var $idea

 $largo++; ## le incrementa un número al largo
    for ($g = 0; $g < $largo; $g++){  ## abre un bucle usando $largo
    $largo1=length($idea);  ## redefine $largo1 dinamicamente en bucle

     $esp=substr($idea,0,1); ## lee primer caracter de la variable

       if ($esp eq " "){ ## detecta si es un espacio vacio
         $idea = substr($idea,1,$largo1-1); ## si lo es, lo recorta
      }
   }
 return $idea;
}   ## cierre de la subrutina

sub trim_dcha{ 
  $largo=length($idea); $largo++;
    for ($g = 0; $g < $largo; $g++){
      $largo1=length($idea);
      $esp=substr($idea,$largo1,1);
         if ($esp eq " "){
           $idea = substr($idea,0,$largo1-1);
        }
    }
    return $idea;
}
1;

 

OTRA MANERA MAS SIMPLE DE HACER LO MISMO
(usando expresiones regulares)
ES LA SIGUIENTE

 

# modulo.pm
## éste módulo hace trim, o sea quita espacios antes y despues del texto ## pero no entre medio

sub trim_izq{  ## apertura de la subrutina
  $idea=~s/^\s*//;  #quita espacios iniciales

  return $idea;
}   ## cierre de la subrutina

sub trim_dcha{ 
  $idea=~s/\s*$//; #quita espacios finales    

  return $idea;
}

sub trim{ 
  $idea=
~ s/\s+//g;  #quita espacios en el medio del texto
  return $idea;
}

1;

 

Veamos que el módulo tiene dos funciones:

     sub trim_izq  y sub trim_dcha

 

Esas son las funciones que deberemos llamar para que una variable pierda los espacios delante y detrás.

También fijate que modulo.pm termina en 1; no es un error, en cambio, te dará error si no lo colocas

 

Ahora, analicemos una de las subrutinas, la trim_izq  que está comentada:

sub trim_izq{  ## apertura de la subrutina

  esto es fácil, definimos la subrutina con ese nombre

 

 $largo=length($idea); ## mide el largo de la var $idea

acá necesitamos saber el largo de la var $idea QUE ES LA QUE NOS MANDA EL VALOR QUE TENEMOS QUE MODIFICAR

 

 $largo++; ## le incrementa un número al largo

le sumamos un punto al largo obtenido (lo entenderas enseguida)


    for ($g = 0; $g < $largo; $g++){  ## abre un bucle usando $largo

abro un bucle que analizará la variable $idea desde su primer caracter=0 hasta el último $largo. Como pusimos < $largo, era necesario sumarle un punto a $largo para que contemple toda la cadena

 

    $largo1=length($idea);  ## redefine $largo1 dinamicamente en bucle

lo mismo de recién, pero en forma dinámica, ya que dentro del bucle, la variable $idea se va a ir reduciendo de largo, por ello es necesario redefinirla.

 

     $esp=substr($idea,0,1); ## lee primer caracter de la variable

en la var $esp guardamos el primer caracter mediante el comando substr. Los parámetros de substr son $idea, que es la variable a analizar, 0 que es el primer caracter a analizar de dicha variable y 1 que es la cantidad de caracteres que vamos a analizar por vez que se ejecute substr.

 

       if ($esp eq " "){ ## detecta si es un espacio vacio

si $esp equivale (eq) a un caracter de espacio " "


         $idea = substr($idea,1,$largo1-1); ## si lo es, lo recorta

lo recortamos con substr, fíjate que lo que antes era 0 ahora es 1, porque ya sabemos que en el primer caracter (0) hay un espacio y no queremos tenerlo, entonces redefinimos la var $idea a partir del segundo caracter, por eso en lugar de cero ponemos uno. También modificamos el parámetro cantidad de caracteres de susbtr, ya que acá queremos todo el resto de la variable. Pero como le hemos quitado un caracter al principio, el largo será igual al largo menos uno.

      } ## cierre del if
   } 
## cierre del for

El bucle for está a los fines de analizar todas las veces que sea necesario el primer caracter, ya que si tiene más de un espacio será necesario verificar. Por ejemplo si la variable $idea es igual a "   tengo que sacar los espacios   ", antes de la palabra tengo hay tres espacios, por lo tanto el bucle se ejecutará tantas veces como caracteres tenga la variable, pero solo reconocerá a la izquierda de la variable tres espacios vacíos.

 
 return $idea;

la subrutina devuelve la var $idea sin los espacios delante o sea a su izquierda


}   ## cierre de la subrutina

 

 

AHORA A NO OLVIDARSE de que estábamos haciendo un script que tiene que usar al modulo.pm, ya que hasta ahora solo hemos visto el módulo, ahora veamos el script.

 

#!/usr/bin/perl
use modulo;  ## esto habilita el uso de modulo.pm

print "Content-type:text/html\n\n";
 $idea="   tengo que sacar los espacios    ";

## ahora llamo a la subrutina para quitarle los espacios a la izquierda

&trim_izq;  ##esto invoca la subrutina de modulo.pm

 

 ## ahora imprime el resultado en pantalla, sin los espacios a la izquierda

print "$idea<br>";

 

 ## ahora le quito los espacios al a derecha

&trim_dcha;  ##esto invoca la subrutina de modulo.pm

 

 ## ahora imprime el resultado en pantalla, sin los espacios a la derecha

print "$idea<br>";

 


 

Ahora los dos scripts

 

# modulo.pm
## éste módulo hace trim, o sea quita espacios antes y despues del texto ## pero no entre medio

sub trim_izq{  ## apertura de la subrutina
 $largo=length($idea); ## mide el largo de la var $idea

 $largo++; ## le incrementa un número al largo
    for ($g = 0; $g < $largo; $g++){  ## abre un bucle usando $largo
    $largo1=length($idea);  ## redefine $largo1 dinamicamente en bucle

     $esp=substr($idea,0,1); ## lee primer caracter de la variable

       if ($esp eq " "){ ## detecta si es un espacio vacio
         $idea = substr($idea,1,$largo1-1); ## si lo es, lo recorta
      }
   }
 return $idea;
}   ## cierre de la subrutina

sub trim_dcha{ 
  $largo=length($idea); $largo++;
    for ($g = 0; $g < $largo; $g++){
      $largo1=length($idea);
      $esp=substr($idea,$largo1,1);
         if ($esp eq " "){
           $idea = substr($idea,0,$largo1-1);
        }
    }
    return $idea;
}
1;

 

 

El script que invoca al modulo es

 

#!/usr/bin/perl
use modulo;  ## esto habilita el uso de modulo.pm

print "Content-type:text/html\n\n";
 $idea="   tengo que sacar los espacios    ";

## ahora llamo a la subrutina para quitarle los espacios a la izquierda

&trim_izq;  ##esto invoca la subrutina de modulo.pm

 

 ## ahora imprime el resultado en pantalla, sin los espacios a la izquierda

print "$idea<br>";

 

 ## ahora le quito los espacios al a derecha

&trim_dcha;  ##esto invoca la subrutina de modulo.pm

 

 ## ahora imprime el resultado en pantalla, sin los espacios a la derecha

print "$idea<br>";

COMENTARIO DE LECTORES
(Viernes|6|Marzo|2009|18:13:14)=No puedo dejar de agradecer el tremendo aporte de esta página, hoy gracias a un articulo publicado aqui logre resolver un problema que me tenia muy preocupado y angustiado ya que mi jefe necesitaba el trabajo rapidamente, asi que de verdad agradesco al que realizará el articulo en cuestion, porque me ha salvado la vida... sigan asi.... MUCHAS GRACIAS Benjamin Parra email del comentarista=benjamin.parra@ecofor.cl

 

COMENTAR ESTE ARTICULO
Su Nombre
Su email
Comentario
 
(El comentario será evaluado previo a ser publicado en la página con su nombre + email) Las respuestas, aparecerán en la página consultada
Enviar Mensajes Públicos Enviar Mensajes Públicos
Articulos más leidos
: : : TORAX OSEO
: : : ETMOIDES, ESFENOIDES, PARIETALES, OCCIPITAL
: : : Arteria Aorta y sus ramas
: : : Nutricion, Energia y Metabolismo
: : : ARTICULACIONES
: : : Arteria Aorta y sus ramas
: : : GENERALIDADES DE MUSCULOS. MUSCULOS DE LA CABEZA
: : : MIEMBRO SUPERIOR OSEO
: : : Trabajo Practico Nº2 d
: : : Aparato Digestivo II
: : : MUSCULOS DEL TÓRAX, LA PELVIS, MIEMBROS SUPERIOR E INFERIOR
: : : Trabajo Practico Nº2 d
: : : Sistema Nervioso
: : : HUESOS DEL CRANEO: Temporal
: : : La célula
: : : MUSCULOS DEL CUELLO
: : : Trabajo Practico Nº2 a
: : : Trabajo Practico Nº1
: : : COLUMNA VERTEBRAL
: : : CINTURAS PELVIANA Y ESCAPULAR
: : : MIEMBRO INFERIOR
: : : Aparato Digestivo
: : : Aparato Digestivo
: : : Huesos de la CARA
: : : Aparato digestivo
: : : La piel - Esqueleto Oseo, Cráneo: el Frontal
: : : Trabajo Practico Nº2 a
: : : Cuál es tu dosha ? (Ayurveda)
: : : Tabla de indice glicemico
: : : Consecuencias de la alimentación inadecuada
: : : Cirugia adenoidea (de las vegetaciones adenoides)
: : : Nervio olfatorio I primer par craneal
: : : Vértigo y enfermedad de meniere
: : : Cirugia de amigdalas
: : : Sindrome y Cefalea Tensional
: : : SERC betahistina
: : : Abceso o flemón periamigdalino
: : : Adenoidectomía en paciente con Hemopatía de VON WILLEBRAND
: : : Sindrome de Samter
: : : Hipoacusia Súbita
: : : Nervio optico, el segundo par craneal
: : : Sindrome de Beckwith Wiedemann
: : : Amigdalas (palatinas)
: : : Adenoides o crecimiento de tejido linfoideo detras de la nariz
: : : Argentina es el Tercer Mundo con gente bien vestida y rostro bonito
: : : Test de lesbianismo
: : : Principios básicos de electricidad
: : : La comunicación
: : :
Alfinal.com no se responsabiliza por el contenido de los artículos publicados.
Si el contenido de algun artículo ofende a terceros, comuniquelo a Alfinal.com
www.alfinal.com - Todos los derechos reservados 2012