viernes, 29 de marzo de 2013

Como procesar argumentos desde la línea de comandos en Perl al estilo Unix Ejemplo 2)


-->
En Perl se puede codificar de distintas maneras la solución de un problema.
A continuación un segundo ejemplo de procesamiento de argumentos recibidos desde la línea de comandos, sin utilizar un módulo de manejo de argumentos.
En este ejemplo, se pueden recibir las siguientes opciones:
  • -d algo: llama al proceso 1.
  • -a algo: llama al proceso 2.
  • -h : llama a ayuda.


El formato de llamado del script puede ser.

 
[usuario@maquina]$  miPrograma.pl  
 
[usuario@maquina]$  miPrograma.pl -a algo

[usuario@maquina]$  miPrograma.pl -d algo

-------------------------------------------- CORTAR AQUI -------------------------------------------------------
#!/usr/bin/perl

use strict;

##################################################

#indice para verificar el valor del argumento

my $j=0; 

my $directorio;

my $archivo;

##################################################

#Procesamiento de parametros de linea de comando

if ($#ARGV==-1) {

    print "Sin argumentos\n";

    ayuda();

} else {

    print("##########################\n");

    print("Cantidad argumentos-> $#ARGV\n");

    print("##########################\n");

    if($#ARGV!=1){

        #se espera la opcion ej -a o -d seguida de una cadena

        print "\n No se ha pasado la cantidad correcta de argumentos \n";

        exit;

    }

    for (my $i=0;$i <= $#ARGV; $i++){

        if($ARGV[$i] eq "-h"){

            ayuda();

        }        

        if($ARGV[$i] eq "-d"){

            $j=$i+1;

            if($j<=$#ARGV){

                $directorio=$ARGV[$j];

                print "Directorio-> $directorio\n";

                proceso1;

                exit;

            }else {

                ayuda();

            }

        }else{            

            if($ARGV[$i] eq "-a"){

                $j=$i+1;

                if($j<=$#ARGV){

                    $archivo=$ARGV[$j];

                    print "Archivo-> $archivo\n";

                    proceso2;

                    exit;

                }else {

                    ayuda();

                }

            }else{

                ayuda();

                exit;    

            }

        }

    }#for ($i=0;$i <= $#ARGV; $i++)

}#if ($#ARGV==-1) {

##################################################

    

sub proceso1{

    print "Proceso 1\n";

}

sub proceso2{

    print "Proceso 1\n";

}

sub ayuda{

    print "\n TEXTO DE AYUDA \n";

}
-------------------------------------------- CORTAR AQUI -------------------------------------------------------

No hay comentarios:

Publicar un comentario