+ Responder Tema
Resultados 1 al 1 de 1
  1. #1
    Achievements:
    Three FriendsRecommendation First ClassCreated Album picturesTagger First Class1000 Experience Points
    Awards:
    Discussion Ender

    Fecha de Ingreso
    25 Jan 2008
    Mensajes
    836
    Points: 19,464, Level: 60
    Points: 19,464, Level: 60
    Level completed: 86%,
    Points required for next Level: 86
    Level completed: 86%, Points required for next Level: 86
    Overall activity: 0%
    Overall activity: 0%
    Agradecio
    3
    Agradecido 47 Veces en 31 Mensajes

    Predeterminado

    Tema: principiante
    Pregunta: Que es CGI?
    Respuesta: Significa Common Gateway Interface, que en español es Interface de Pasarela Común, que significa que se pueden correr varios procesos en paralelo, sin que se molesten entre si. Con esto podemos hacer que un mismo script sea ejecutado por todos los visitantes de nuestra página, y que cada uno se ejecute independientemente de los demás.

    Tema: variables array o vectores
    Pregunta: Verificar todos los elementos del array
    Respuesta: esto se puede hacer de manera sencilla a travez de un bucle que verifique cada uno de los elementos.

    Código:
    foreach $elemento (@array){
    print "$elemento <br>\n";
    }

    De esta forma imprimimos por pantalla un listado de cada uno de los elementos del array.

    Tema: Enviar E-Mails
    Pregunta: Como puedo en enviar un mail con Linux?
    Respuesta: Es muy común que los formularios web se envíen a una casilla de mail, para ello se puede usar este código, siempre y cuando estemos en linux...

    open (MAIL,"|/usr/lib/sendmail");
    print MAIL "To: para\@mail.com\n";
    print MAIL "From: de\@mail.com\n";
    print MAIL "Subject: Asunto\n\n";
    print MAIL "bla bla bla\n";
    close MAIL;

    Es de notar que en cada uno de los email se coloca la barra invertida (\) antes del arroba, esto se hace para que el interprete de perl lo tome literalmente y no piense que es una variable array.

    Tema: Principiante
    Pregunta: No puedo hacer andar el script...
    Respuesta: Los errores más comunes son: No colocar el print "content-type: text/html \n\n"; en la primera linea de salida.
    No colocar los permisos de ejecución a los scripts (Generalmente chmod 755)
    Tener mal la dirección del intérprete de perl en la primera linea del script: Generalmente #!usr/bin/perl en unix y #!c:/perl/bin/perl.exe

    Tema: Principiante
    Pregunta: Como trabajo con perl y módulos?
    Respuesta: Para instalar el intérprete de perl en windows o linux puedes visitar [Sólo los usuarios registrados y activos pueden ver los links. ], (en linux seguramente ya te viene en la distribución)...Para instalar y leer la documentación de los módulos debes visitar [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Manejo de strings
    Pregunta: Como puedo concatenar strings y variables?
    Respuesta: Hay varias formas, una es con comillas dobles (") de la forma:

    $usuario = 'juan'; #Se toma literalmente con comillas simples, no se interpreta nada.
    $string = "Hola $usuario como andás?"; #(resultado Hola juan como andás) acá si se interpretó la variable.

    Otra forma es con el . de la forma:

    $string = 'hola' . $usuario . 'como andás?'; #(resultado Hola juan como andás) acá si se interpretó la variable de forma separada.

    Tema: Variables Arrays o Vectores
    Pregunta: Como crear un Array?
    Respuesta: Se hace asignando los distintos valores que tendrán los elementos del array, dichos elementos se empiezan a contar desde el 0 y se utilizan como variables escalares comunes.

    my @array = ('elemento0','elemento1','elemento2','elemento3',' elemento4','elemento5');

    Para trabajar con cada uno de los elementos del array podemos...

    $array[3] = 'valor del elemento 3 del vector @array';

    Tema: Variables Arrays o Vectores
    Pregunta: como agregar uno o varios elementos al array?
    Respuesta: Para agregar elementos al array tenemos 2 funciones (push y unshift) que sirven para agregar elementos al final o al comienzo de un array respectivamente:

    push (@array, $nuevo_elemento);

    unshift (@array, $nuevo_elemento);

    NOTA: podemos agregar más de un elemento al mismo tiempo, separándolos por comas o colocando otro array

    Tema: Variables Arrays o Vectores
    Pregunta: como eliminar un elemento al array?
    Respuesta: Para eliminar elementos al array tenemos 2 funciones (pop y shift) que sirven para eliminar el último o primer elemento del array respectivamente, a la vez ese elemento eliminado lo podemos guardar en una variable escalar.

    $elem_eliminado = pop(@array);

    $elem_eliminado = shift(@array);

    Tema: Archivos
    Pregunta: Como trabajar con un archivo?
    Respuesta: Para abrir archivos Perl tiene un manejador de archivos o FileHandle que se utiliza de la siguiente manera:

    open (DATABASE, "<archivo.txt");
    @registros = <DATABASE>;
    close (DATABASE);

    De esta forma estamos cargando todas las lineas del archivo en un array, en donde cada linea sea un elemento del array.

    Es de notar que antes del nombre del archivo hay un signo de menor, eso significa que el archivo se abrirá para solo lectura, para hacerlo de escritura (borrando previemente la info que tenía) se usa el signo mayor (>) y para solamente agregar info a la que ya contiene el archivo se usan 2 signos mayores (>>), lo que hace es posicionarce en el último caracter del archivo y mediante un "print" podemos agregarle info:

    open (DATABASE, ">>archivo.txt");
    print DATABASE "Nuevo registro en el archivo\n";
    close (DATABASE);

    Tema: Archivos
    Pregunta: Como bloquear un archivo?
    Respuesta: Cuando trabajamos bajo linux tenemos la fuención flock() que nos permite bloquear (para lectura o escritura) el archivo para que mientras lo tengamos abierto, los demás no puedan hacer acciones que terminen violando la integridad de la información que tenemos en el archivo:

    flock(DATABASE,2);

    Con el número 2 tenemos acceso exclusivo al archivo (cuando lo vamos a escribir debemos usar esta opción, para que otros no escriban al mismo tiempo que nosotros). Con el número 1 tenemos acceso accceso compartido para lleer el archivo y que otros también lo puedan leer.

    Tema: funciones y subrutinas
    Pregunta: Como creo y llamo funciones y como les paso parámetros?
    Respuesta: En Perl los términos subrutina, procedimiento y función son sinónimos, para crearlas utilizamos la palabra sub y para pasarles parámetros lo hacemos de forma tradicional:

    Código:
    #creamos la subrutina
    sub mi_rutina {
    my($parametro1,$parametro2) = @_;
    print "hola $parametro1 $parametro2";
    }

    # llamamos a la subrutina y le pasamos los 2 parámetros
    my $pregunta = 'como andas';
    &mi_rutina('Pablo',$pregunta);

    Tema: Variables hash
    Pregunta: que es y como se usa una variable hash?
    Respuesta: Una variable hash es una variable que tiene una lista de pares del tipo nombre=valor, de manera que podamos colocar varias igualdades con respecto a esa variable, por ejemplo, crearemos una variable cliente y le cargaremos los siguientes datos:

    my %cliente;
    $cliente{'nombre'} = 'Esteban';
    $cliente{'apellido'} = 'Quintana';
    $cliente{'alias'} = 'MonoSwim';
    $cliente{'nacionalidad'} = 'Argentina';

    De esta manera almacenamos toda la info de nuestro cliente en una variable hash, en distintos pares ordenados.

    Tema: Variables hash
    Pregunta: Como leer las claves olos valores de una variable hash?
    Respuesta: En Perl tenemos 2 funciones que nos devuelven un array con todos las claves del hash o los valores... estas funciones son keys y values...y se usan de la siguiente manera:

    @claves = keys (%hash);
    @values = values (%hash);

    Para obtener los pares ordenados de una sola vez podemos usar la funcion each...que veremos en la próxima pregunta.

    Tema: Variables hash
    Pregunta: Como leer cada uno de los elementos de una variable hash?
    Respuesta: Lo podemos hacer usando la función each...Adentro de un bucle que recorra todo el hash:

    Código:
    while (($clave,$valor) = each(%hash)){
    print "La clave $clave tiene el valor $valor";
    }

    Esta variable es muy util a la hora de trabajar con XML, ya que tiene un formato parecido y se puede procesar facilmente.

    Tema: Directorios
    Pregunta: Como puedo abrir y leer la info que tiene un directorio?
    Respuesta: Lo podemos hacer de una manera muy similar a la de abrir archivos...como veremos a continuación:

    opendir (DATABASEDIR, "../htdocs/imagenes/");
    my @imagenes = readdir (DATABASEDIR);
    closedir(DATABASEDIR);

    Este es un código que alguna vez usé para abrir un directorio en donde almacenaba mis .jpg cuyos nombres completos quedaban almacenados en la variable @imagenes.

    Tema: Cookies
    Pregunta: Como escribir Cookies
    Respuesta: Para enviarle una cookie para que el navegador la guarde la tenemos que imprimir antes de colocar el content-type: text/html \n\n...Y se hace de la siguiente manera
    Código:
    $expires = '3-May-2005 00:00:00 GTM';
    $path = '/cgi-cgi';
    $domain = '.e-netsoft.com.ar

    print "Set-Cookie: nic = MonoSwim; expires = $expiration; path = $path; domain = $domain; secure \n";

    De esta manera estamos enviando la cookie nic que tiene el valor MonoSwim que será almacenada hasta el 3-May-2005 y será usada por el directorio cgi/bin del dominio e-netsoft.com.ar

    Tema: Cookies
    Pregunta: Como leo las cookieas ya enviadas ?
    Respuesta: Se hace a través de las variables de entorno...
    Código:
    my (@cookies, %cookie_hash, $cookie, $key, $val);

    @cookies = split (/; /,$ENV{'HTTP_COOKIE'});

    foreach $cookie (@cookies){
    ($key, $val) = split (/=/,$cookie);
    $cookie_hash{$key} = $val;
    }

    Así creamos un hash que contiene los pares de nombre = valor de nuestras cookies, para accederla hacemos $cookie_hash{'nic'} y nos trarerá MonoSwim

    Tema: Tiempo -> hora y fecha
    Pregunta: Como saber la fecha del servidor?
    Respuesta: El servidor tiene almacenadas 2 fechas, una es la local y otra es la universal del meridiano de grenweech (o como se escriba). y las podemos accesar con las funcines localtime y gmtime respectivamente.

    ($sec,$min,$hora,$mdia,$mon,$ano,$wdia,$ydia,$isds t) = localtime (time);

    Cabe destacar que wdia es el día de la semana, sirve para saber si es lunes, martes...
    y mdia es el día del mes como hoy que es 12

    Tema: CGI y Script
    Pregunta: Como tomo los datos del formulario o del HTML ?
    Respuesta: Capturamos los datos, tanto por GET como por POST

    Código:
    if ($ENV{'REQUEST_METHOD'} eq 'POST') {
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    } else {
    $buffer = $ENV{'QUERY_STRING'};
    }
    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $name =~ tr/+/ /;
    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
    }

    Ahora podemos ver la info del formulario con $FORM{'nombre_campo_html'} como por ejemplo $FORM{'nombre'} , $FORM{'email'} ...

    O con el módulo CGI...

    Código:
    #!/usr/bin/perl

    use strict;
    use CGI;
    my $cgi = new CGI;
    my %FORM = $cgi->Vars;

    Tema: Imprimir código HTML
    Pregunta: Como imprimir el HTML de una sola vez, sin concatenar ?
    Respuesta: Se puede imprimir todo el HTML sin tener problemas con las comillas dobles del HTML e interpretando cada una de las variables que coloquemos entre medio, de la siguiente manera:

    print "Content-type: text/html\n\n";
    print << "HTML_END";

    <html><body bgcolor="#006699">...
    ...
    $mivariable
    ...
    </body></html>
    HTML_END
    exit(1);

    Tema: funciones y subrutinas
    Pregunta: Como pasar parámetros por referencia?
    Respuesta: En perl podemos pasar cualquier variable por referencia, ahorrando la memoria utilizada y haciendo más rápido el script.

    Código:
    my $variable = "hola gente";
    &imprimir(\$variable);
    exit;

    sub imprimir(){
    my $ref = $_[0];
    print "content-type: text/html \n\n";
    print "$$ref";
    }

    De esta manera pasamos la dirección de memoria en donde está la variable, y cuando la usamos en la subrutina estamos usando la variable original.

    Tema: Tiempo -> hora y fecha
    Pregunta: Como calcular la fecha en forma de string?
    Respuesta: Para calcular la fecha de la forma "Miércoles, 25 de agosto de 2004"...
    Código:
    my ($sec,$min,$hora,$mdia,$mon,$ano,$wdia,$ydia,$isds t,@meses,@dias,$fecha);
    ($sec,$min,$hora,$mdia,$mon,$ano,$wdia,$ydia,$isds t) = localtime (time);
    @meses = ('Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre ','Diciembre');
    @dias = ('Domingo','Lunes','Martes','Miercoles','Jueves',' Viernes','Sabado');

    $ano += 1900;

    $fecha = "$dias[$wdia], $mdia de $meses[$mon] de $ano";

    Tema: Manejar Código HTML
    Pregunta: Como entrecomillar una cadena ?
    Respuesta: Cuando usamos strings de HTML muchas veces las comillas son muy molestas, para lo cual perl tiene una solución:

    my $variable = q (<img src="1.jpg" alt="valor $5">);
    my $variable = qq (<img src="1.jpg" alt="$mensaje">);

    cuando colocamos q es para entrecomillar sin interpolación, como las comillas simples, se toma todo literal
    cuando colocamos qq es para entrecomillar con interpolación, como las comillas dobles, o sea, las variables serán comprendidas

    Tema: Manejo de Archivos
    Pregunta: Como puedo eliminar los saltos de linea?
    Respuesta: Con una simple expresión regular se puede hacer fácilmente...

    $registro =~ s/\n//g;

    O si quiero intercambiar los saltos de linea del archivo de texto por saltos de linea de HTML

    $value =~ s/\n/<br>/g;

    Tema: módulos
    Pregunta: Como instalar un Módulo en Windows
    Repuesta: Para instalar un módulo tenemos que:

    Entrar al MS-DOS (Inicio-programas-accesorios-Símbolos del sistema)
    Ejecutar la sentencia "cd.." hasta posicionarnos en c:/
    Luero tenemos que ir a la carpeta bin del directorio perl, la cual generalmente está en c:/perl/bin...Entonces tenemos que ejecuta "cd perl" y "cd bin"
    Ahora que ya estamos en la carpeta debemos ejecutar "ppm" , y una vez en el ppm podemos instalar lo que querramos por ejemplo "install dbi" o "install Time-Local"

    Tema: errores
    Pregunta: Como manejar errores de ejecución?
    Respuesta: Podemos hacer una subrutina que imprima los mensajes de error para cuando haya algún problema en nuestro script
    Código:
    sub error {
    print "content-type: text/html \n\n";
    print "Error: Cant $_[0] the $_[1]";
    print '<br><br>comunicate con Esteban Quintana a [Sólo los usuarios registrados y activos pueden ver los links. ]';
    exit;
    }

    Cuando escribamos nuestras lineas de código colocamos una llamada alternativa a esta función pasandole 2 parámetros explicando el error:

    open (MAIL, "|/usr/lib/sendmail -t") || &error('open','mail process');

    De manera que o se ejecuta normalmente o imprime el error

    Tema: variable hash
    Pregunta: Como verificar la existencia de una clave
    Respuesta: Se hace con la función exist...

    Código:
    if (exist $hash{'nombre'}) {
    print "tenemos el nombre";
    }else{
    print "Escribime tu nombre!!!";
    }

    Tema: variable hash
    Pregunta: Como obtener los pares en un orden
    Respuesta: Se hace en conjunto con la funciones sort y keys...

    Código:
    print "Content-type: text/html\n\n";

    foreach $key (sort (keys %hash)){
    print "La clave $key tiene el valor $hash{$key} <br>\n";
    }

    Tema: Variables de Entorno
    Pregunta: Como puedo listar todas las variables que hay ?
    Respuesta: hay que listar todos los keys del hash %ENV, como ya vimos se hace de la siguiente manera:

    Código:
    print "Content-type: text/html\n\n";
    foreach $var (sort(keys(%ENV))) {
    $val = $ENV{$var};
    $val =~ s|\n|\\n|g;
    $val =~ s|"|\\"|g;
    print "${var}=\"${val}\" <br>\n";
    }


    Tema: Bases de datos
    Pregunta: Como conectarme a la base de datos ?
    Respuesta: Lo podemos hacer usando el módulo DBI con lo cual al principio del script debemos llamar al módulo

    #!/usr/bin/perl
    use DBI;

    #Luego creamos unas variables con la info de la base de datos...

    my $db_name = "nombre_de_la_database";
    my $db_user = "nombre_de_usuario";
    my $db_pass = "contraseña_password";
    my $db_driver = "mysql"; #puede ser cualquier otra

    #Ahora simplemente debemos conectarnos

    Código:
    my $dbh = DBI->connect("dbi:$db_driver:$db_name",$db_user,$db_pa ss) || &error('conect','DataBase');
    print "estoy conectado!!!!!";
    $dbh->disconnect || &error('disconect','database');

    Tema: Bases de datos
    Pregunta: Como realizar una consulta a la base de datos ?
    Respuesta: Seguimos usando el módulo DBI...

    Código:
    my $dbh = DBI->connect("dbi:$db_driver:$db_name",$db_user,$db_pa ss) || &error('conect','DataBase');
    my $sth = $dbh->prepare("SELECT * FROM personas ORDER BY id") || &error('preparar','sql querry');
    $sth->execute() || &error('execute',$dbh->errstr);
    while (@db_registro = $sth->fetchrow_array()) {
    print "clientes: $db_registro[0] - nombre: $db_registro_[1] <br>\n";
    }
    $sth->finish() || &error('finish','sql querry');
    $dbh->disconnect || &error('disconect','database');

    Tema: Enviar E-Mails
    Pregunta: Como puedo en enviar un mail con windows?
    Respuesta: Es muy común que los formularios web se envíen a una casilla de mail, para ello necesitamos instalar el módulo Mail::Sendmail...

    use Mail::Sendmail;

    Código:
    # Creamos el hash con nuestro mensajes
    my %mail = (
    To => 'info@para.com',
    From => 'informes@remitente.com',
    Subject => 'Asunto del mensaje',
    Message => "mensaje",
    Smtp => 'www.misitio.com'
    );

    # Envíar el mensaje
    unless (sendmail(%mail)) {
    # Error!
    print "Content-type: text/html\n\n";
    print "ERROR\n";
    exit(1);
    }

    # Envío correcto.
    print "Location: [Sólo los usuarios registrados y activos pueden ver los links. ] \n\n";
    exit(1);

    Para más información, checkeen el tutorial que escribio kidd en
    [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: funciones y subrutinas
    Pregunta: Como especifico el valor de retorno?
    Respuesta: Se puede especificar el valor o los valores que la subrutina nos devolverá al ser ejecutada, siempre mediante la función return()

    Código:
    sub devuelve (){
    my @valores = ('hola','gente','hermosa','inteligente');
    return('palabra',@valores);
    #como vemos podemos retornar strings o variables
    }

    Ahora para almacenar esa información que nos devuelve la subrutina la llamamos de la siguiente manera
    Código:
    my @valores_retornados = &devuelve();

    Tema: Principiantes -> Formularios
    Pregunta: Como puedo mandar los datos del formulario a mi E-Mail?
    Respuesta: Como ya sabemos el documento HTML que tiene el formulario se ejecuta del lado del cliente, ahora bien, para emviar el mail necesitamos un Script de perl, asp o php que se ejecute del lado del servidor que tome los datos del formulario y los envíe por E-Mail. (acá veremos solo el de perl.)

    Ahora bien, para que esto funcione necesitamos tener un servidor que sea apto para ejecutar Script CGI de PERL, si tenemos un servidor gratuito es muy difícil que lo tenga, así que debemos o cambiar de servidor o usar un servicio gratuito como el de [Sólo los usuarios registrados y activos pueden ver los links. ]

    Si podemos ejecutar perl podemos encontrar muchos script desde gratuitos hasta pagos, como ser el FormMail de [Sólo los usuarios registrados y activos pueden ver los links. ] o el FormProcesor de [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Archivos
    Pregunta: Que modos hay para abrir un archivo ?
    Respuesta: existen básicamente 5 modos...

    Código:
    open (DATABASE, "<$file")
    Abre el archivo de modo solo lectura, es el valor que viene predeterminado

    open (DATABASE, ">$file")
    Abre el achivo para escritura, borrando todo su contenido actual

    open (DATABASE, ">>$file")
    Abre el archivo para escritura y se posiciona al final del mismo, para agregarle nueva info a la que ya tiene el archivo

    open (DATABASE, "+>$file")
    Abre el archivo de modo lectura y escritura, si el archivo no existe lo creará

    open (DATABASE, "+<$file")
    Abre el archivo de modo lectura y escritura, si el archivo no existe genera un error

    Tema: Variables Array
    Pregunta: Como puedo ordenar los elementos de un array?
    Respuesta: Para ordenar los elementos de un array tenemos 2 funciones muy fáciles de usar:

    sort() Devuelve los elementos ordenados del array que le coloquemos como parámetro
    reverse() Devuelve los elementos en el orden contrario al que están en el array que le pasamos como parámetro

    Código:
    #Si lo queremos en otros arrays:
    @b = sort(@a);
    @c = reverse(@b);

    #Si lo queremos en el mismo array, sin copiarlo:
    @a = sort(@a);
    @a = reverse(@);

    #si lo queremos hacer en un solo paso
    @a = reverse sort @a;

    Este último ejemplo devuelve los elementos ordenados desendentemente en un solo paso y en el mismo array

    Tema: Variables Escalares
    Pregunta: Como eliminar el último caracter y los saltos de línea de un string?
    Respuesta: Esta es usa función muy sencilla pero muy util para eliminar los saltos de línea que suelen tener los escalares cuando leemos un archivo de texto.

    Se hace mediante la función chop, que devuelve el último caracter del string (el que elimina)

    Código:
    my $ultimo_caracter = chop($string);

    Otra forma de eliminar todos los saltos de línea que puede tener un string es con expresiones regulares, de la siguiente manera:

    Código:
    $string =~ s/\n//g;

    Tema: Variables Escalares
    Pregunta: Como saber la longitud de un string?
    Respuesta: Es muy importante saber cuan grande es un escalar, sobretodo cuando lo vamos a almacenar en una base de datos, además se usa por cuestriones de seguridad para no usar memoria de más...Esto se puede calcular de una manera muy simple con la función length()

    Código:
    my $string = "diente";
    my $contador = length($string);
    print "$contador";

    Ese ejemplo va a imprimir 6

    Tema: Arvhivos y Directorios
    Pregunta: Como saber si el archivo o directorio existe y/o es modificable?
    Respuesta: En perl tenemos los llamados operadores de comprobación para sacar algunas informaciones interesantes sobre los archivos y directorios:

    Se utilizan de la siguiente manera



    Código:
    my $file = "archivo.txt";
    if (e- $file) {
    # OK, el archivo existe
    open ...
    }
    else {
    print "el archivo $file no existe.\n";
    }

    De esta forma solo abrimos el archivo si este existe, sino imprimimos un mensaje. Con el operador -e podemos comprobar la existencia de archivos y directorios, y con el operador -w podemos saber si el archivo en cuestión es modificable o no lo es.

    Tema: Bases de datos
    Pregunta: Como realizar una consulta por referencia ?
    Respuesta: Realizar una consulta por referencia es muy importante para optimizar el uso de la memoria, ya que usamos los datos directamente desde la base de datos, sin cargarlos en variables de nuestro script, copiando la información que sería muy pesado para la memoria ram.

    Código:
    my $db_registro_ref;
    my $dbh = DBI->connect("dbi:$db_driver:$db_name",$db_user,$db_pa ss) || &error('conect','DataBase');
    my $sth = $dbh->prepare("SELECT * FROM personas ORDER BY id") || &error('preparar','sql querry');
    $sth->execute() || &error('execute',$dbh->errstr);
    while ($db_registro_ref = $sth->fetchrow_arrayref()) {
    print "clientes: $$db_registro[0] - nombre: $$db_registro_[1] <br>\n";
    }
    $sth->finish() || &error('finish','sql querry');
    $dbh->disconnect || &error('disconect','database');

    Como vemos lo usamos desde una referencia, de manera que se haga mucho más rápido y eficiente.

    Tema: Formularios
    Pregunta: Que parámetros le paso al CGI desde mi Formulario ?
    Respuesta: Esta es una pregunta más de HTML que de PERL, pero la suelen hacer...Es que la mayoría de los script para enviar formularios por mail se basan en el famoso FormMail.pl . Con lo cual en el HTML le deberíamos pasar algunos valores:

    Código:
    <form ACTION="Dirección exacta del script .cgi o .pl" method="post" name="FORMULARIO">
    <input type="hidden" name="recipient" value="Casillas de Mail a las cuales llegaran los datos (separaadas por coma)">
    <input type="hidden" name="redirect" value="Dirección exacta de la página de agradecimiento como ser http://www.misitio.com/gracias.html">
    <input type="hidden" name="subject" value="Mensaje de Asunto">

    Tema: manejo de Código HTML
    Pregunta: Como sacar la información que hay en los tags (x)html ?
    Respuesta: Es muy fácil de hacer mediante una expresión regular, supongamos que tenemos todo el código html de una página almacenada en un $escalar...Debemos definir cual es el tag inicial y el de cierre...

    Código:
    my $string_html = '<p>blabla...</p>...<p>bla...</p>...<p>jeje</p>';

    my $tag_inicial = '<p>';
    my $tag_final = '</p>';

    my @parrafos = $string_html =~ m/$tag_inicial(.*?)$tag_final/mgi;

    Cada uno de los elementos del array va a tener a cada uno de los párrafos de la página html.

    Tema: CGI (Interface de pasarela común)
    Pregunta: Como puedo hacer que mi script solo se ejecute en mi página web ?
    Respuesta: Se hace usando la variable de entorno $ENV{'HTTP_REFERER'} que nos dice cual es la página que está pidiendo la ejecución del script...

    Código:
    my @referers = ('www.tudominio.com.ar', '*.tudominio.com.ar', 'tudiminio.com.ar');
    &check_url;

    sub check_url {

    my $check_referer = 0;

    if ($ENV{'HTTP_REFERER'}) {
    foreach my $referer (@referers) {
    if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) {
    $check_referer = 1;
    last;
    }
    }
    }
    else {
    $check_referer = 1;
    }

    if ($check_referer != 1) { &error('verificar','host') }
    }

    Tema: Variables Escalares (strings)
    Pregunta: como separar o juntar strings ?
    Respuesta: Dos de las funciones más comunes en programación son split() y join() que nos permiten dividir un string en varios substrings y juntar dichos substrings en un solo string respectivamente.

    Como se imaginarán debe haber una expresión que la utilicemos como delimitador entre los strings...

    Código:
    my @sub_strings = split(/&/, $string_entero);

    Este código son separa el $string_entero en cuantas veces aparezca el caracter & (es muy usual separar los strings por salto de linea \n).

    Código:
    $string_entero = join("y",@strings);

    Ahora los juntamos nuevamente ahora juntados por la y (i griega)

    Tema: CGI
    Pregunta: Como direccionar la salida del script a un documento .html ?
    Respuesta: Es muy común que cuando el script realiza sus taréas devuelva un mensaje de que se realizó todo correctamente...En vez de eso podemos directamente direccionar la salida del script directamente a un documento .html

    Esto se puede hacer si devolvemos un encabezado http que le diga al navegador que documento html debe visualizar...

    Código:
    print "Location: http://www.misitio.com/gracias.html\n\n";

    Nótese que con este encabezado no debemos imprimir nada más, ni siquiera el print "content-type: text/html \n\n";

    Tema: Variables Array o Vectores
    Pregunta: Como eliminar todos los elementos de un array ?
    Respuesta: Esta es una pregunta muy frecuente que me hacer y la verdad es que la respuesta es más que simple, le volvemos a asignar valores 1 o 2 de forma conjunta al array y automáticamente esos 1 o 2 valores son los únicos que tiene, y los demás son eliminados, sin tener la necesidad de eliminar uno por uno a cada elmento.

    Código:
    my @array = ('1','2','3','4','5','6','7','8');
    @array = ('g','y');
    print @array;

    Eso efectivamente imprime solamente g y, fueron eliminaros el 3,4,5,6,7,8

    Tema: CGI (Interface de pasarela común)
    Pregunta: como insertar el resultado de un script en un .HTML ?
    Respuesta: Se puede hacer mediante una simulación de javascript, desde el HTML llamamos a un script de PERL como si fuera un javascritp, y el código que devuelva el scirpt de perl será con sintaxis de javascript...

    En el script colocamos:



    Código:
    #!/usr/bin/perl

    ($sec,$min,$hora,$mdia,$mon,$ano,$wdia,$ydia,$isds t) = localtime (time);
    @meses = ('Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre ','Diciembre');
    @dias = ('Domingo','Lunes','Martes','Miercoles','Jueves',' Viernes','Sabado');

    $ano += 1900;

    print "content-type: text/html \n\n";

    print "document.write(\'<font color=\"\#00FFFF\">$dias[$wdia], $mdia de $meses[$mon]</font></b></td>\') ";

    exit;

    y en el Código HTML de la página llamamos a es script:

    Código:
    <script language="javascript" src="http://www.dominio.com/cgi-bin/fecha.pl"></script>

    Para hacer que esto funcione debemos tener un servidor seguro (SSI)

    Tema: Principiante
    Pregunta: Como puedo editar un script ?
    Respuesta: Para editar un script no necesitamos ningún programa especial, ya que son archivos de texto común, podemos usar cualquier editor de texto simple como el block de notas o el wordpad de windows o el emac de linux.

    Si quieren checkear la sintaxis bájense el intérprete de perl (gratis), instálenlo, y ejecuten el script a ver si nos tira el resultado que queríamos o nos tira algún error.

    para escribir su primer programa usen el hola mundo:
    Código:
    #!c:/perl/bin/perl.exe

    print "content-type: text/html \n\n";
    print "hola mundo !!!";
    exit();

    Con ese simple script podemos checkear que ande todo correctamente, para largarnos a programar en perl sin problemas.

    Tema: Principiante
    Pregunta: Como puedo verificar la sintaxis de un script ?
    Respuesta: Para hacerlo debemos si o si tener instalado el intérprete de PERL en nuestra computadora, para eso debemos bajarlo de [Sólo los usuarios registrados y activos pueden ver los links. ] e instalarlo.
    Una vez instalado el intérprete podemos un editor de PERL como el de [Sólo los usuarios registrados y activos pueden ver los links. ] que tiene una función (f12) que verifica con el intérprete la sintaxis del script, si no tenemos ningún editor lo podemos hacer desde la linea de comandos (MSDOS de windows).

    Tenemos que tener el script a verificar en la carpeta en donde instalamos el intérprete (c:/perl por defoult), entonces entramos a esa carpeta (cd.. para ir a la carpeta padre y cd carpeta para entrar a una carpeta)

    cd..
    cd perl
    cd carpeta-del-script
    perl script.pl

    Esa instrucción "perl script" ejecutará el script y nos devolverá el resultado del mismo, y si tiene un error nos dira exactamente cual es y en que línea se encuentra.

    Tema: Principiante
    Pregunta: Que es el Content-type: text/html ?
    Respuesta: Las cabeceras HTTP nos permiten enviarle información al navegador sobre la información que está por recibir, las más comuner que se usan son:

    Content-type: text/html # Documento HTML
    Content-type: text/xml # Documento XML
    Content-type: text/plain # Texto
    Content-type: image/gif # Imagen con formato GIF
    Content-type: image/jpeg # Imagen con formato JPEG
    Content-type: video/mpeg # Vídeo en formato MPEG

    Con lo cual si estamos trabajando en un script CGI que devuelve un documento XML este debe tener la cabecera de la siguiente manera

    print "content-type: text/xml \n\n"

    Así el navegador sabrá como manejar el documento.

    Tema: CGI (Interface de pasarela común)
    Pregunta: Como definir el flujo del script CGI dependiendo de lo que el usuario desee ?
    Respuesta: Cuando hacemos un script CGI generalmente terminamos con muchas subrutinas que se deben ejecutar en algun momento dado, dependiendo de algún hecho, como ser que el usuario esté registrado o sea un invitado. Esto se hace generalmente evaluando una variable que le pasaremos el valor desde nuestro documento HTML ya sea por get o por post.

    Primero hacemos la entrada de datos tanto por get o por post:
    Código:
    my (@pairs,$buffer,$pair,$name,$value,%input_data);

    if ($ENV{'REQUEST_METHOD'} eq 'GET') {

    @pairs = split(/&/, $ENV{'QUERY_STRING'});

    }elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {

    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    @pairs = split(/&/, $buffer);

    }else {

    &error('leer','datos');

    }

    foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);

    $name =~ tr/+/ /;
    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $name =~ tr/\0//d;

    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ tr/\0//d;
    $value =~ s/\n//g;

    $input_data{$name} = $value;
    }

    Ahora tenemos una variable %input_data que tiene dodos los valores que le pasamos al script, ahora hay que evaluarla y dependiendo de su valor vamos a llamar a una función y otra:

    Código:
    if ($input_data{'action'} eq 'iniciar_sesion') {
    &iniciar_sesion();
    &registrar_sesion();
    &imprimir_mensajes();
    }
    elsif ($input_data{'action'} eq 'cerrar_sesion') {
    &cerrar_sesion();
    }
    else {
    &continuar_sesion();
    }
    exit(1);

    Como ven acá evalué la variable $input_data{'action'} que es lo que le envío desde el documento HTML

    Tema: Principiante
    Pregunta: Como instalar un script en mi servidor web ?
    Respuesta: Una vez que tenemos el script CGI, debemos instalarlo en el servidor web de nuestro sitio...Para lo cual debemos:

    1) Subirlo por FTP a la carpeta que el servidor web tiene para los scripts CGI, generalmente es la carpeta CGI-BIN, pero puede ser LOCAL-CGI o algo así...

    2) Cuando los subimos por FTP debemos hacerlo en modo ASCII, como ya sabemos el script es un archivo de texto como el HTML, razón por la cual debe ser subido en modo ASCII

    3) Cambiarle los permisos a chmod 755 (en linux), esto es para que el script pueda ser ejecutado. Lo podemos cambiar mismo delde el FTP, haciendo botón derecho del mouse y viendo las propiedades del script (Esto en la mayoría de los ftps, como ser el Leap FTP)

    Tema: Archivos y Directorios
    Pregunta: Como renombrar o eliminar un archivo ?
    Respuesta: En PERL tenemos 2 funciones muy fásiles de usar que nos permiten cambiarle el nombre a un archivo (rename) y eliminar un archivo (unlink)

    Código:
    rename("$nombre_actual","$nuevo_nombre") || &error('renombrar','archivo');

    unlink("$archivo_a_aliminar") || &error('eliminar','archivo');;

    Tema: Archivos y Directorios
    Pregunta: Como eliminar todo un directorio ?
    Respuesta: De la misma manera que unlink nos elimina un archivo, rmdir con elimina un directorio...

    Código:
    rmdir("images") || &error('eliminar','directorio');

    Tema: Links
    Pregunta: Un script para enviar formularios por mail con archivos adjuntos
    Respuesta: Con los archivos como FormMail podemos enviar los formularios por mail pero no ponerle ningún archivo adjunto, ahora nuestro amigo TUSHCA ha encontrado un script gratuito que si lo permite

    Acá está el link

    [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Formularios
    Pregunta: Como hacer para que el formulario se envie una sola vez ?
    Respuesta: Es muy común que los usuarios clickeen varias veces en el botón de Enviar al ver que los resultados del envío no llegan rápidamente. Mediante un simple script de JavaScript podemos hacer que al enviarse el formulario por primera vez, el botón de enviar quede desabilitado.

    Código:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>M o n o S w i m</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    <script language="JavaScript" type="text/javascript">
    function bloquear() {
    form1.Submit.disabled = true;
    form1.Submit.value = "Procesando...espera unos segundos";
    }
    </script>

    </head>

    <body>
    <form name="form1" method="post" action="script.pl" onSubmit="bloquear()">
    <p>
    <input type="text" name="textfield">
    </p>
    <p>
    <input type="submit" name="Submit" value="Submit">
    </p>
    </form>
    </body>
    </html>

    Tema: Principiantes
    Pregunta: Un tutorial que empiece desde cero ?
    Respuesta: Hace unos días me acordé que había escrito un tutorial sobre como empezar a programar en perl...Es corto y fácil...

    [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Links
    Pregunta: Se puede usar perl para la plataforma .net ?
    Respuesta: Claro que se puede, la empresa activestate (la que da perl para windows) sacó PERLNET que nos permite unir perfectamente estas tecnologías...Y como si esto fuera poco, nuestros amigos de la Universidad de Granada, saracor un tutorial online que nos explica el funcionamiento de este sistema.

    [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Links
    Pregunta: Tutoriales de PERL en castellano ?
    Respuesta: Desde hace bastante nuestro amigo Kidd empezó con el proyecto de [Sólo los usuarios registrados y activos pueden ver los links. ] y ahora ya tiene una gran cantidad de tutoriales que hablan sobre todos los temas...Una muy buena fuente de información en castellano

    [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Links
    Pregunta: De donde puedo descargar PERL Script's CGI gratuitos ?
    Respuesta: Tienes un sin fin de páginas...Acá les mando las que me parecieron más importantes...

    [Sólo los usuarios registrados y activos pueden ver los links. ]
    [Sólo los usuarios registrados y activos pueden ver los links. ]
    [Sólo los usuarios registrados y activos pueden ver los links. ]
    [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Links
    Pregunta: Hay hostings gratuitos que soporten PERL ?
    Respuesta: Si, acá yo conozco uno...

    [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Variables Escalares (String)
    Pregunta: Como pasar de minúsculas a mayúsculas ?
    Respuesta: Es muy fácil de hacer mediante expresines regulares

    Código:
    #!c:/perl/bin/perl.exe

    print "Content-type: text/html\n\n";

    $user = 'Texto EN DISTintas forMaS';

    $user =~ tr/[a-z]/[A-Z]/;
    print "<html><h1>$user</h1></html>\n";

    exit;

    Tema: Scripts y Links
    Pregunta: Hay un script de Portal Web ?
    Respuesta: Si, conozco uno muy bueno que es el Webapp...

    [Sólo los usuarios registrados y activos pueden ver los links. ]

    No necesita Bases de datos ni nada, es muy fácil de usar e instalar

    Tema: Scripts y Links
    Pregunta: Como subir imágenes a mi servidor ?
    Respuesta: Les mando este script para subir imágenes, funciona tanto en linux como en windows...Espero que les sirva...

    Código:
    #!/usr/bin/perl

    ########### #!c:/perl/bin/perl.exe en windows...

    use strict;
    use CGI;

    my $cgi = new CGI;

    my %input_data = $cgi->Vars;

    print "Content-type: text/html\n\n";

    if ($input_data{'action'} eq 'process'){
    my $file = $cgi->param('file');
    print "action: $input_data{'action'}<br>
    file: $file";

    #sacamos el nombte
    #my $file = $cgi->param('file');
    my $fileName = "$file";
    $fileName =~ s/ /_/gi;
    $fileName =~ s!^.*(\\|\/)!!;

    #guardamos la imagen solamente si es .jpg
    if ($fileName =~ /.jpg/){
    open (IMAGEN, ">fotos/$fileName") || die "No se pudo guardar la imagen";
    binmode(IMAGEN);
    while (my $bytesread = read($file, my $buffer, 1024)) {
    print IMAGEN $buffer;
    }
    close (IMAGEN);
    }
    else {
    print "Formato no permitido";
    }
    print '<br><a href="imagen.pl">Volver</a>';
    }else{

    print q~<form name="form1" enctype="multipart/form-data" method="post" action="imagen.pl">
    <input type="hidden" name="action" value="process">
    <p>Formulario para subir imágenes al servidor...: <br></p>
    <p>Archivo: <br>
    <input type="file" name="file">
    </p>

    <input type="submit" name="Submit" value="Submit">
    </form> ~;
    }

    exit(1);

    Para más info lean este tutorial del cual me basé para hacerlo...
    [Sólo los usuarios registrados y activos pueden ver los links. ]

    Tema: Scripts y Links
    Pregunta: Un script tipo FormMail pero para windows
    Respuesta: Gracias a la usuario Pameladelreal encontré este script clonado del FormMail, para que trabaje en windows.

    [Sólo los usuarios registrados y activos pueden ver los links. ]
    Última edición por Adrian; 30/01/2008 a las 08:59 AM


 

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

     

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes