Professional Documents
Culture Documents
II semestre
Tema: Laboratorio #6
Visual Basic
Vs
Perl
Profesor:
Sal Ardines G.
Asignatura:
Estructura de Lenguajes de Programacin (LP)
Nombre:
Ian A. Herrera A.
Sed. : 8-874-58
Fecha de entrega:
Martes 11 de noviembre de 2014
ndice
1.
2.
3.
4.
5.
6.
7.
8.
9.
Hoja de Presentacin
Contenido del laboratorio:
Introduccin
Breve Resea Histrica
Caractersticas del Lenguaje de Programacin
Objetos de datos
3.1 Tipos de datos primitivos
3.1.1 Variables y constantes
3.1.2 Tipos de datos numricos y Tipos de datos de caracteres
3.1.3 Tipos de datos booleanos
3.2 Tipos de datos estructurados
3.2.1 Tipos de datos de arreglos
3.2.2 Tipos de datos de registro
3.2.3 Apuntadores o Punteros
3.2.4 Archivo de entrada/salida
3.3 Tipos de datos definidos por el usuario
Control de secuencia
4.1 Expresiones
4.2 Enunciados
4.1.1 Enunciados de entrada y salida
4.1.2 Enunciados condicionales
4.1.3 Enunciados de iteracin
Subprogramas y gestin de almacenamiento
Ejemplos prcticos
Cuadro de Comparacin y Evaluacin de los Lenguajes de Programacin
Evaluacin
Bibliografa
Introduccin
Resea Histrica
Perl es un lenguaje de programacin diseado por Larry Wall. Perl toma caractersticas
del lenguaje C, del lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un
grado inferior, de muchos otros lenguajes de programacin.
Larry Wall comenz a trabajar en Perl en 1987 mientras trabajaba como programador
en Unisys y anunci la versin 1.0 en el grupo de noticias comp.sources.misc el 18 de
diciembre de 1987. El lenguaje se expandi rpidamente en los siguientes aos. Perl 2,
publicado en 1988, aport un mejor motor de expresiones regulares. Perl 3, publicado
en 1989, aadi soporte para datos binarios.
La primera versin de PERL que lleg a ser suficientemente conocida fue la versin 4,
dada a conocer al mundo por el libro del camello. Esta versin se estuvo desarrollando
desde 1991 a 1993, y coincidi con la popularidad del PERL como lenguaje para
programacin de servidores de Internet; aunque originalmente se haba diseado
como lenguaje para administracin de sistemas.
La versin 5 estable no apareci hasta el 17 octubre de 1994, y ha sido tan popular
que todava se usa. Fue casi una completa reescritura del intrprete y aadi muchas
nuevas caractersticas al lenguaje, incluyendo objetos, referencias, paquetes y
mdulos. A destacar, los mdulos proveen de un mecanismo para extender el lenguaje
sin modificar el intrprete. Esto permiti estabilizar su ncleo principal, adems de
permitir a los programadores de Perl aadirle nuevas caractersticas.
Y hacen a PERL tan fcil de programar, incluyendo los mdulos, las facilidades para
programacin dirigida a objetos, referencias y mucha mejor documentacin. Aparecen
muchos otros libros, tales como Learning Perl.
Este Lenguaje ha sido creado para ser practico (fcil de usar, eficiente, completo) en
lugar de bonito (pequeo, elegante, minimalista). Su mayor caracterstica son que es
fcil de usar, soporta programacin procedural y orientada a objetos, tiene un fuerte
soporte incorporado para procesamiento de texto.
Objetos de datos
Tipos de datos primitivos
Variables y constantes
VARIABLES
Las variables almacenan el valor asignado en la memoria, para acceder a dicho valor
hay que hacerlo a travs del nombre con el que se declar, en Perl los nombres de las
variables empiezan por el carcter "$" y no es obligatorio declarar el tipo de datos, ni
tampoco indicar explcitamente de que se trata de una variable, aunque se puede
hacer mediante la palabra reservada my, las variables pueden ir cambiando su valor a
lo largo de la ejecucin del programa, esto quiere decir que no son constantes, una
variable puede almacenar un valor y ser cambiado tras una determinada accin.
Ejemplo:
#Variables
my $variable = "Hola soy una variable \n";
print $variable;
$variable = "Hola soy una variable \n";
print $variable;
CONSTANTES
Las constantes al contrario que las variables mantienen el valor constante, es decir, no
pueden cambiar su valor en ningn punto de la ejecucin, es til para definir valores
que no van a tener que ser sometidos a cambios, como podra ser el nmero pi, un
importe fijo, un determinado nmero, ... Para declarar una constante en Perl se utilizan
las palabras reservadas use constant, seguido del nombre y la asignacin de su
valor, como en el caso de las variables tampoco es necesario especificar el tipo de
datos, ya que Perl lo interpreta atendiendo al valor asignado.
Ejemplo:
#Constantes
use constant numero_pi => 3.14;
print "Numero pi es una constante: ".numero_pi;
Una lista es una coleccin de escalares (una variable que almacena una lista se
llama array)
Todas las variables estn precedidas por un sigil, que identifica el tipo de dato que es
accedido (no el tipo de dato de la misma variable). Se puede usar el mismo nombre
para variables de diferentes tipos, sin que tengan conflictos.
$var # un escalar
@var # un ''array''
%var # un ''hash''
Datos Escalares
Comienzan con el signo $y contienen datos de tipo escalar. Por escalar entendemos valores
numricos y/o alfanumricos. Para la asignacin se usa el signo igual (=) como en la mayora
de los lenguajes. En el caso de ser un valor alfanumrico (texto) este se escribe entre comillas.
Al final de la asignacin se debe escribir ";".
$n
= 42;
$nombre = "juan";
Perl convertir los strings en nmeros y viceversa dependiendo del contexto en que
sean usados.
Datos array
Comienzan con el signo @ y contienen una lista de valores escalares (nmeros y/o textos). Al
ser una lista de valores para acceder a cada de uno estos se utiliza un nmero que indica su
posicin dentro de la lista. La numeracin empieza en 0, y se coloca entre corchetes [ ]. A este
nmero que indica la posicin de un valor dentro de la lista del arreglo se denomina ndice
Datos hash
Un hash puede ser inicializado desde una lista de pares clave/valor.
%favorito = (joe => 'rojo', sam => 'azul',);
#!/usr/bin/perl
#Declaramos la variable primer_array como un array
my @primer_array;
#asignamos unos cuatro valores al array
@primer_array= (1,"dos", 3,"cuatro");
#Aadimos un quinto de forma individual
$primer_array[4]=5.5;
#Mostramos el tercer elemento del array
print "El tercero es= ".$primer_array[3]." \n";
my @array3D=([],[],[]);
$array2D[0][0]=0;
Arrays asociativos
Un array asociativo en Perl o tabla hash (como tambin se le denomina) es un array
donde los elementos son referenciados mediante claves en vez de una posicin. Para
los array asociativos se utiliza el smbolo %. Al igual que sucede con los arrays
normales, cuando se accede a un elemento de un array asociativo se debe referenciar
como un escalar con el smbolo $. Adems la indexacin por clave no se hace
utilizando los corchetes, sino que se utilizan las llaves ({ }).
#asignamos valores a una tabla hash
my %colorfruta;
$colorfruta {"verde"}="kiwi";
Puntero a un Array
Se puede crear una referencia a una lista usando en lugar de ( ). Mediante esta tcnica
se pueden implementar arreglos multidimensionales.
%dia=(Lun,"Lunes",Mar,"Martes ");
%dia=( Lun => "Lunes",
Mar => "Martes", );
Clase Struct
Exporta una sola funcin struct(), dada una lista de elementos con nombres y tipos, la
funcin struct() crea una clases que implementa una estructura de datos parecida a un
struct
struct( CLASS_NAME => [ ELEMENT_LIST ]);
struct( CLASS_NAME => { ELEMENT_LIST });
struct( ELEMENT_LIST );
Ejemplo
use Class::Struct;
struct( Rusage => {ru_utime => 'Timeval',
ru_stime => 'Timeval',
Apuntadores o Punteros
Punteros
Los References en Perl apuntan a una direccin de memoria donde se almacena el
valor de una variable. Si bien se pueden hacer referencias a cualquier tipo de variable,
la referencia en si se trata siempre como un Escalar por lo que comienzan con $.
my $scalar = 'hola';
my $scalar_ref = \$scalar;
print "Scalar: $$scalar_ref\n";
Archivo de entrada/salida
Otra funcin necesaria cuando se realizan programas es la lectura/escritura de
archivos.
open(ARCHIVO2,">",$archivo2) or die
mensaje al
usuario: $!;
open(FINAL,">>",$arFinal) or die
mensaje al
usuario: $!;
DBD::Sqlflex
DBD::Solid
DBD::DBMaker
DBD::Informix
DBD::Ovrimos
DBD::Teradata
DBD::Multiplex
DBD::InterBase
DBD::XBase
DBD::ODBC
DBD::Adabas
y muchos ms
Como ves existen mdulos de DBD para casi cualquier sistema de database que hay,
slo es cuestin de que instales el que quieres usar.
Control de secuencia
Expresiones
Enunciados
Enunciados de entrada y salida
Escribir en la salida estndar (pantalla) ya sabemos hacerlo, ahora nos interesa
aprender como leer cosas desde el teclado y como escribir y leer en ficheros.
Para leer de teclado se utiliza <STDIN>, que es un manejador de ficheros (Filehandle),
que por costumbre se ponen en maysculas. (Tambin existe <STDOUT> y <STDERR>
para la salida estndar y la salida de errores respectivamente).
Lectura de STDIN:
#!/usr/bin/perl
print "Hola. Cmo te llamas?\n";
$nombre=<STDIN>;
#le quitamos el caracter de retorno de carro
chop($nombre);
if ($nombre eq "")
{
print 'Qu pasa? eres mudit@?'."\n";
}
else
{
print "Hola $nombre, yo me llamo Flanagan. Estudias o trabajas?\n";
}
Para escribir en la salida estndar se utiliza print como hemos visto, pero si queremos
escribir en la salida de errores sera poniendo despus de print el manejador de fichero
de donde queremos escribir.
Lectura de STDIN, escritura en STDERR y STDOUT:
#!/usr/bin/perl
print "Hola. Cmo te llamas?\n";
$nombre=<STDIN>;
#le quitamos el caracter de retorno de carro
chop($nombre);
if ($nombre eq "")
{
print STDERR 'Qu pasa? eres mudit@?'."\n";
}
else
{
print STDOUT "Hola $nombre, yo me llamo Flanagan. trabajas o
vives?\n";}
Ya sabemos leer/escribir en un manejador de fichero (vale, que hasta ahora slo hemos
usado pantalla y teclado). Ahora vamos a ver como se hara con ficheros. Para trabajar
con un fichero hay que abrirlo, escribir/leer de l y cerrarlo. Para abrir un fichero se
utiliza la funcin open y para cerrarlo con close. El formato para abrir un fichero es
open (Manejador_de_fichero, Modo_y_NombreFichero). Lo modos de abrir un fichero se
muestran en la siguiente tabla.
Modo
Significado
"Nombre"
"<Nombre"
">Nombre"
">>Nombre"
"+>Nombre"
Enunciados condicionales
Perl mantiene todas las estructuras de control de flujo que pueda tener cualquier otro
lenguaje, pero con la peculiaridad de que un bloque siempre debe ir entre llaves ({
}), aun cuando el bloque contenga un nica sentencia.
Un resumen general de las estructuras de control de flujo es:
if (EXPR) BLOQUE
SENTENCIA if (EXPR);
switch(EXPR){case n{BLOQUE}
While
my $i = 0;
my $maximo = 10; # por decir un maximo cualquiera.
while ( $i < $maximo){
$array[$i] = El valor es $i; #imprime el valor del contador por consola.
$i++;
# o --> $i=$i + 1;}
Foreach
Ejemplo de un foreach sobre un array:
foreach my $val (@array) { print "Este es el valor del array: $val"\n";}
Ejemplo de un foreach sobre un hash:
foreach my $val (keys %miHash){ # $val contiene el nombre del key del valor, no
el valor real.
my $aux = $miHash{$val};
print El valor de aux es $aux.\n;}
Una funcin que no tiene un return explcito retorna, no obstante, el valor de la ltima
expresin que se ha ejecutado; por tanto, la funcin funcion_1 anterior no necesita la
sentencia return.
Cuanto se llama a una funcin, no es obligatorio recoger el valor devuelto por sta.
Los parmetros de una funcin se pasan siempre por referencia; por consiguiente, si se
modifica $_[1] se est cambiando el segundo parmetro usado en la expresin que
llama a la funcin. Puede ser peligroso si no se maneja con cautela.
sub funcion_2 { $_[0]=7;
# Modifica el primer parmetro en el llamador}
$a = 5;
funcion_2($a);
print $a;
# Imprime: 7
Bloques
Un bloque consiste en un conjunto de expresiones dentro de llaves {}. Las funciones
son bloques, pero tambin puede haber bloques sin la palabra sub. Una de las razones
para tener bloques es la de disponer de variables locales que desaparecen cuando el
bloque termina.
$a=5;
{ $b=7;
Cuando definimos una variable por regla general tiene un mbito global al script, a no
ser que utilicemos las funciones my o local para limitar su alcance. Su significado es
muy parecido, con algn matiz:
La funcin my es la ms utilizada para definir variables locales. Las variables
declaradas con my son visibles slo dentro del bloque, y no desde fuera. Tampoco son
visibles a las funciones que se llaman desde el bloque.
La funcin local se usa para definir otras variables locales, pero a diferencia de
las anteriores, si son visibles a las funciones que se llamen desde el bloque.
$a = 5;
# variable global que nunca muere
{local($a)=3;
# El valor 5 se guarda temporalmente
# para reponerlo cuando el bloque termine
local($b)=7;
# Como $b no existia, al salir del bloque
# no va a existir
funcion_4();
# En funcion_4() se puede usar $a y $b}
print $a;
# imprime: 5
print $b;
# No imprime nada: $b no existe
sub funcion_4 {
print $a;
# Imprime: 3
print $b;
# Imprime: 7 }
Ejemplos prcticos
Perl
#!/usr/bin/env perl
do{
print "Lista de Artistas\n\n
1.Foo Fighters\n
2.Nirvana\n
3.Coheed and Cambria\n
4.Salir\n\n
Seleccionar una de las opciones anteriores\n";
$opt=<STDIN>;
chop($opt);
use warnings;
use feature ":5.12";
my $file1 = "foo.txt\n\n";
my $file2 = "nirvana.txt\n\n";
my $file3 = "coheed.txt\n\n";
given($opt) {
when(1)
{ unless(open FILE, $file1) {die "nUnable to open $file1\n\n";}while(my $line =
<FILE>) {print $line;}close FILE;print "\n \n\n";system("pause");system("cls");}
when(2)
{ unless(open FILE, $file2) {die "nUnable to open $file2\n\n";}while(my $line =
<FILE>) {print $line;}close FILE;print "\n \n\n";system("pause");system("cls");}
when(3)
{unless(open FILE, $file3) {die "nUnable to open $file3\n\n";}while(my $line =
<FILE>) {print $line;}close FILE;print "\n \n\n";system("pause");system("cls");}
when(4)
{system("cls"); print "\n\n\n\n\n\n\n\nBuuuuuueeeeeeennnooo Se Termino
xD\n\n\n\n\n\n\n\n";}
default
{ system("cls");print " \n\n\n\n\n\n\n\nPorfavor elige ua opcion valida UmU
\n\n\n\n\n\n\n\n";system("pause");system("cls");}
}
}while($opt!=4);
Visual Basic
Public Class Form1
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Label1.Click
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:\Users\Ian\Documents\Perl\foo.txt")
MsgBox(fileReader)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click
Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:\Users\Ian\Documents\Perl\nirvana.txt")
MsgBox(fileReader)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click
Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:\Users\Ian\Documents\Perl\coheed.txt")
MsgBox(fileReader)
End Sub
End Class
1. Expresividad
Calificacin
Perl
1. Visual Basic: Lenguaje en donde la manera de plasmar
un algoritmo en cdigo es bastante parecida a la del
lenguaje de programacin Pascal debido a que muchos
de los mdulos que utiliza inician y terminan con
palabras reservadas; no utiliza el ; para terminar las
sentencias y se utiliza el : para separar ecuaciones en
una sola lnea.
4,75
i.
ii.
Visual
Basic
4,90
Ejemplo Iteracin:
while (EXPR) BLOQUE
do BLOQUE while (EXPR);
Ejemplo seleccin:
if (EXPR) BLOQUE else BLOQUE
c) Expresiones Matemticas:
i.
ii.
2. Bien-definido
a) Sintaxis(General programas):
Perl
i.
Visual Basic:
Module mainModule
Sub Main()
MsgBox("Hello, World!") ' Display message on computer screen.
End Sub
End Module
4,70
Visual
Basic
4,85
ii.
Perl:
#!/usr/bin/perl
print "Hola. Cmo te llamas?\n";
b) Sintaxis(en Funciones)
i.
Visual Basic:
ii.
Perl:
sub funcion_1 {
$a = shift;
$y = 2 * $a;
return($y); }
3.
Tipos
estructuras
datos
y
de
a) Datos primitivos:
Perl
i.
4,65
Visual Basic:
Tipos numricos
no integrales
SByte
Byte
Decimal
Short
UShort
Single
Integer
UInteger
Double
Long
ULong
ii.
Visual
Basic
4,70
Perl: escalar.
Datos Estructurados:
4. Modularidad
i.
ii.
Perl
i.
4,75
1. Subprocedimientos.
2. Los procedimientos de control de eventos son
procedimientos Sub que se ejecutan en respuesta a
un evento provocado por una accin del usuario o
por un suceso en un programa.
3. Procedimientos de propiedad: get y set.
4. Procedimientos de operador.
5. Procedimientos genricos: definen uno o
varios parmetros de tipo adems de sus parmetros
normales, de forma que el cdigo de llamada puede
pasar tipos de datos especficos cada vez que realiza
una llamada.
ii.
Visual Basic:
Bloques
Un bloque consiste en un conjunto de expresiones
dentro de llaves {}. Las funciones son bloques, pero
tambin puede haber bloques sin la palabra sub. Una de
las razones para tener bloques es la de disponer de
variables locales que desaparecen cuando el bloque
termina.
$a=5;
{ $b=7; my($c)= 3;
funcion_3();
# "my" crea una variable local que
# solo existe en este bloque }
print $a; print $b; print $c;
iii.
Visual Basic:
[Public | Protected | Friend | Protected Friend | Private]
Structure structname
{Dim | Public | Friend | Private} member1 As datatype1
' ...
{Dim | Public | Friend | Private} memberN As
datatypeN
End Structure
iv.
Perl:
Visual
Basic
4,85
use Class::Struct;
struct( Rusage => {ru_utime => 'Timeval', # user time used
ru_stime => 'Timeval', # system time used});
a) Manejo de archivos simples:
5. Facilidades de
e/s
Perl
i.
ii.
4,95
Visual
Basic
4,90
6.
Transportabilidad
i.
ii.
a) Dependencia de S.O
Perl se pueden utilizar en:
Perl
4,95
1. Windows
2. Linux (u otros UNIX)
3. Mac (con el compilador Xcode)
Visual
Basic
4,00
7. Eficiencia
Perl
4,85
Language
Java
Perl
C/C++
C#
Assembler
Fortran
Ada
Basic (e.g. Visual Basic)
You name it
Other languages
Time taken to run a simple empty loop test for 10 000 billion iterations
Under one second
approx. 1 month
approx. 1 month
approx. 1 month
approx. 1 month
approx. 1 month
approx. 1 month
approx. 1 month
approx. 1 month or greater
approx. 1 month or greater
Visual
Basic
4,80
http://www.javaperformancetuning.com/news/qotm028.shtml
http://benchmarksgame.alioth.debian.org/u32q/benchmark.php?test=all&lang=fpascal&id=1&data=u32q
8. Pedagoga
Perl
4,80
i.
ii.
iii.
iv.
Visual
Basic
4,90
Perl
4,85
Visual
Basic
4,75
Promedio
Visual Basic
Perl
4,73
4,81
Evaluacin
Despus de aplicar todos los criterios a los lenguajes de programacin Perl,
Visual Basic llegamos a la conclusin que Perl con una calificacin de 4,81 es
mejor lenguaje que Visual Basic con una calificacin de 4,73. Adems
durante la investigacin de la informacin para poder evaluar estos lenguajes
hemos aprendido muchas cosas nuevas sobre estos lenguajes de
programacin
Bibliografa
http://www.ccg.unam.mx/~contrera/bioinfoPerl/node103.html
http://es.wikipedia.org/wiki/Perl
http://flanagan.ugr.es/perl/datos.htm
http://informatica.blogs.uoc.edu/2011/11/23/%C2%BFel-lenguaje-de-programacionmas-expresivo/
http://flanagan.ugr.es/perl/control.htm
http://www.tizag.com/perlT/perlif.php
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Perl/Estructuras_de_control
http://blog.openalfa.com/como-usar-variables-de-tipo-hash-en-perl
http://www.osmosislatina.com/lenguajes/perl/basico.htm
http://www.perlmonks.org/bare/?node_id=135509
http://perlenespanol.com/tutoriales/bases_de_datos/como_conectarte_a_tu_database.h
tml
http://jquery-manual.blogspot.com/2013/09/variables-y-constantes-en-perl.html
http://www2.iib.uam.es/bioinfo/curso/perl/tutoriales/cicei/cap3.htm
http://www.javaperformancetuning.com/news/qotm028.shtml
http://www.perlmonks.org/?node_id=227771
http://sandbox.mc.edu/~bennet/perl/leccode/
http://friedo.com/blog/2013/07/arrays-vs-lists-in-perl
http://www6.uniovi.es/perl/tutor/cap01.htm