viernes, 12 de julio de 2013

IDE para Perl

Cuando se programa en Perl, tarde o temprano se tendra que pensar en cambiar el editor de texto (vi, vim, notepad, textpad,…) por un IDE integrado que agilice nuestro desarrollo y nos permita depurar los programas de forma sencilla, con el módulo de depuración ó a base de “prints” como se hacía anteriormente. 

Después de analizar diferentes IDEs que existen para Perl con el objetivo de agilizar el desarrollo encontre varios en el internet. 

Buscando y leyendo Blogs concuerdan que el mejor IDE para Perl es el de ActiveState, ya que su implementación de perl es considerada la mejor para la plataforma win32 es ActivePerl Pro Studio, el unico punto es el precio de la licencia solo para el primer año.

Otra de las opciones es el ECIP. ECIP es un IDE basado en la plataforma de Eclipse, actualmente su última versión estable es la 0.4 . Este IDE tiene todas las funciones básicas y cuenta con la potencia del entorno de eclipse. Es una opción muy interesante, aunque el depurador no es comparable al de ActiveState ayudará a depurar de forma más sencilla programas. Cuenta con la ventaja de ser multiplataforma (el resto de IDEs que hemos encontrado son casi todos para win32)

El Perl Editor de EngInSite fue la elección final al mejor IDE. En su última versión han mejorado notablemente todas sus funciones, pero además ahora tiene un depurador mucho más potente e integración con CVS y SVN. El depurador permite ver en tiempo de ejecución el valor de las diferentes variables y hashes. En resumen, es el IDE que mas se acerca a la excelencia de ActivePerl, ademas cuenta con una versión gratuita, pero no aporta mucho valor, ya que tiene la funcion de Syntax highlighting y poco mas. 

El resto de los IDEs para Perl son de mala calidad o no tienen funciones que se consideren indispensables, aun así se lisa para ver si se ajustan a otras necesidades.

PerlEditor es un editor perl bastante competitivo con un depurador y todas las opciones deseables, permite depurar CGIs, pero carece de interfaz integrado con CVS o SVN.

Perl-Express quizás el “peor” de todos, pero al menos es gratuito (aunque muestra un anuncio antes de cerrarse). Tiene un sencillo depurador, pero carece de integración CVS y SVN. 

Open perl IDE, puede ser una alternativa a tener en cuenta en el futuro, pero a día de hoy no está al nivel mínimo que debemos exigir aun IDE de programación.

Por último sólo mencionar que también existe Perl Builder 2.0. Su versión Professional Version, esta no tan potente.


jueves, 11 de julio de 2013

Solución al Primer Ejercicio Práctico en Clase

#!/usr/bin/perl

#Ingreso de Datos e Impresion de Longitud
#################################################
#Solicita Nombre
print "Ingrese el Nombre:";
$nombre = <stdin>;
#Elimina el salto de linea del nombre
chop($nombre);

#Solicita Apellido
print "Ingrese el Apellido:";
$apellido = <stdin>;
#Elimina el salto de linea del apellido
chop($apellido);

#Solicita Edad
print "Ingrese la Edad:";
$edad = <stdin>;
#Elimina el salto de linea de la edad
chop($edad);

#Solicita Sexo
print "Ingrese el Sexo (M|F):";
$sexo = <stdin>;
#Elimina el salto de linea del sexo
chop($sexo);

#Solicita DPI
print "Ingrese el numero de DPI:";
$dpi = <stdin>;
#Elimina el salto de linea del DPI
chop($dpi);

#Solicita Universidad
print "Ingrese la Universidad:";
$universidad = <stdin>;
#Elimina el salto de linea de la universidad
chop($universidad);

#Solicita Especialidad
print "Ingrese la Especialidad:";
$especialidad = <stdin>;
#Elimina el salto de linea de la especialidad
chop($especialidad);

#Solicita Centro de Trabajo
print "Ingrese el Centro de Trabajo:";
$trabajo = <stdin>;
#Elimina el salto de linea del centro de trabajo
chop($trabajo);

#Solicita Salario
print "Ingrese el Salario (Quetzales):";
$salario = <stdin>;
#Elimina el salto de linea del Salario
chop($salario);

#Inicializa Gustos
@Gustos = ("Deporte","Comida","Vehiculos","Viajar","Juegos de Mesa");

#Inicializa Carga de Trabajo
%Carga = ("Lunes",8,"Martes",4,"Miercoles",4,"Jueves",6,"Viernes",7,"Sabado",0,"Domingo",0);

#Concatena todos los datos
$total = $nombre.$apellido.$edad.$sexo.$dpi.$universidad.$especialidad.$trabajo.$salario;

#Imprime la Longitud de la Cadena Completa
print "Longitud Total de Datos: ".length($total)."\n";

#Obtiene el Nombre Completo de la Persona
$nombre_completo= $nombre." ".$apellido;

#Si la edad es mayor a 37, cambia variable asociativa de dia martes
if (($sexo == "F") || (($sexo == "M") && ($edad > 37))){
$Carga{"Martes"} = 0;
}
print "Carga del Martes: ".$Carga{"Martes"}."\n";

#Si la edad es mayor a 40, le agrega el trato
if ($edad > 40){
if ($sexo eq "M"){
$trato = "Sr. ";
}
else{
$trato = "Sra. ";
}
}
else{
$trato = "";
}
$nombre_completo = $trato.$nombre_completo;
print "Nombre Completo: ".$nombre_completo."\n";

#Agrega longitud de universidad al DPI
$long = length($universidad);
$long--;
$dpi = $dpi.$long;
print "DPI: ".$dpi."\n";

#Verifica si es mujer mayor de 20 y la carga del miercoles es par
if (($sexo == "F") && ($edad > 20) && ($Carga{"Miercoles"}%2 == 0)){
$salario = $salario * 3;
}
print "Salario: ".$salario."\n";

#Verifica la primer aparicion de a y la ultima de e
$primer_a = index($nombre_completo, "a");
$ultima_e = rindex($nombre_completo, "e");
#No se encuentra la letra a
if ($primer_a == -1){
print "No se encontro la letra a\n";
}
#Letra a encontrada
else{
print "Posicion de la primera letra a: $primer_a\n";
}
#No se encuentra la letra e
if ($ultima_e == -1){
print "No se encontro la letra e\n";
}
#Letra e encontrada
else{
print "Posicion de la ultima letra e: ".$ultima_e."\n";
}

#Encuentra el espacio entre apellidos
$espacio = index($apellido, " ");
#Obtiene Primer Apellido
$primer_apellido = substr($apellido, 0, $espacio);
$segundo_apellido = substr($apellido, $espacio + 1);
#Comparacion entre primer apellido y universidad
$comparacion = $primer_apellido cmp $universidad;
#Verifica valor de comparacion
if ($comparacion == 0){
print "Universidad y Primer Apellido Iguales (0)\n";
}
else{
if ($comparacion == 1){
print "Primer Apellido Mayor que Universidad (1)\n";
}
else{
print "Primer Apellido Menor que Universidad (".$comparacion.")\n";
}
}

#Obtiene espacio de nombre
$espacio = index($nombre," ");
if ($espacio == -1){
$espacio = 3;
}
#Subcadena de nombre
$subcadena = substr($nombre, $espacio);
#Concatena con Segundo Apellido
$subcadena = $subcadena." ".$segundo_apellido."\n";
print "Subcadena del Nombre: ".$subcadena."\n";