{"id":478,"date":"2012-07-11T19:48:18","date_gmt":"2012-07-11T19:48:18","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=478"},"modified":"2012-07-11T20:10:15","modified_gmt":"2012-07-11T20:10:15","slug":"ejemplo-sencillo-aplicacion-oop-en-perl-que-implementa-un-motor-de-acceso-a-datos-distribuido-en-mysql","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/ejemplo-sencillo-aplicacion-oop-en-perl-que-implementa-un-motor-de-acceso-a-datos-distribuido-en-mysql\/","title":{"rendered":"Ejemplo sencillo, aplicaci\u00f3n OOP en PERL que implementa un motor de acceso a datos distribuido en MYSQL"},"content":{"rendered":"<p>Para realizar el ejemplo es necesario el empleo de 2 ficheros.<\/p>\n<p>1- Ejemplo.pl<br \/>\n2- MotorSGBD.pm<\/p>\n<p>Veamos el c\u00f3digo en el siguiente POST.<\/p>\n<p>&nbsp;<\/p>\n<p><!--more--><br \/>\nFichero Ejemplo.pl<\/p>\n<pre lang=\"perl\">#!\/usr\/bin\/perl\r\n# EXPLICACION:\r\n# Intentare crear un motor sencillo de acceso a una base de datos del gestor MYSQL mediante \r\n# consultas SELECT, INSERT y DELETE.\r\n# Para ello empleare modulos CPAN para el acceso a la base de datos.\r\n# De esta manera demuestro el acceso distribuido a una base de datos MYSQL\r\n\r\n# IMPORTANTISIMO:\r\n# Necesario descargarse \r\n# Modulo DBD::mSQL \/ DBD::mysql - mSQL and mysql drivers for the Perl5 Database\r\n# http:\/\/www.cpan.org\/modules\/01modules.index.html el , Msql-Mysql-modules-1.2219.tar.gz\r\n# He probado con dbi:ODBC:Host, pero es necesario crear un DSN local en el sistema \r\n# para conectar por ODBC. Por lo que el objeto no tiene sentido.\r\n# Me temo que con activeperl para windows, ejecutando el ppm \r\n# no encuentra el modulo para mysql\r\n\r\n# Estructura de tabla: usuario:  id (int), nombre (varchar), apellido1(varchar), edad (int)\r\n# Creada para propositos del ejemplo, sobre un servidor mio,\r\n# cambiar datos del servidor por uno vuestro.\r\n\r\nuse MotorSGBD;\r\nsystem(\"cls\");\r\n\r\n#Datos de la conexi\u00f3n \r\n\r\n$host=\"la IP\";\r\n$puerto=\"3306\";\r\n$db=\"ejemplo\";\r\n$usuario=\"demo\";\r\n$password=\"oscar\";\r\n\r\n$base= MotorSGBD-&gt;new();\r\n\r\n$base-&gt;Inicializar ($host,$puerto,$db,$usuario,$password);\r\n\r\n$base-&gt;Conectar;\r\n#No se realmente tu edad. Sugongamos 30\r\n$base-&gt;Insertar_Datos(\"2\",\"Oscar\",\"de la Cuesta\", \"30\");\r\n\r\n#Consulta datos almacenados inicialmente en la base, id 1\r\n$base-&gt;Consultar_Datos(\"1\");\r\n\r\n#Borra los datos del ID 2 insertado arriba.\r\n$base-&gt;Borrar_Datos(\"2\");\r\n\r\n$base-&gt;Cerrar;<\/pre>\n<p>Ahora el contenido del segundo fichero. MotorSGBD.pm<\/p>\n<pre lang=\"PERL\">package MotorSGBD;\r\n\r\n#Uso de librerias de CPAN, necesitan estar instaladas comprobado con pmp\r\nuse DBI;\r\n# Necesario descargarse \r\n   # Modulo DBD::mSQL \/ DBD::mysql - mSQL and mysql drivers for the Perl5 Database\r\n   #http:\/\/www.cpan.org\/modules\/01modules.index.html el Msql-Mysql-modules-1.2219.tar.gz\r\n\r\n#Programamos el constructor de la clase\r\nsub new{\r\n\r\n  my $this=shift; #Cogemos la clase que somos o una referencia a la clase (si soy un objeto)\r\n  my $class = ref($this) || $this; #Averiguo la clase a la que pertenezco\r\n  my $self={}; #Inicializamos la tabla hash que contendr\u00e1 las var. de instancia \r\n\r\n  $self -&gt;{HOST}=\"\";\r\n  $self -&gt;{PUERTO}=\"\";\r\n  $self -&gt;{BASE} = \"\";\r\n  $self -&gt;{USUARIO} = \"\";\r\n  $self -&gt;{PASSWORD}=\"\";\r\n  bless $self, $class; #Perl nos tiene que dar el visto bueno (bendecirla)\r\n  return ($self); #Devolvemos la clase reci\u00e9n construida\r\n\r\n}\r\n\r\n#Inicializa los campos del objeto con los valores pasados.\r\nsub Inicializar \r\n{\r\n$self -&gt;{HOST}=$_[1];\r\n$self -&gt;{PUERTO}=$_[2];\r\n$self -&gt;{BASE}=$_[3];\r\n$self -&gt;{USUARIO}=$_[4];\r\n$self -&gt;{PASSWORD}=$_[5];\r\n}\r\n\r\nsub Conectar\r\n{\r\n# Realizamos la conexi\u00f3n a la base de datos \r\nsystem(\"cls\");\r\nprint \"Intentando conectar don DBI-&gt;MYSQL ..., si no contecta, condigurar un ODBC \\n\";\r\n\r\n$dbh = DBI-&gt;connect('dbi:mysql:'.$self -&gt;{HOST},$self -&gt;{USUARIO},$self-&gt;{PASSWORD}) or die \"Error de conexion: $DBI::errstr\\n\";\r\n#He probado con dbi:ODBC:Host, pero es necesario crear un DSN local en el sistema para conectar por ODBC. \r\n#Por lo que el objeto no tiene sentido.\r\n}\r\n\r\nsub Consultar_Datos\r\n{\r\n$id =$_[1];\r\n$consulta = \"SELECT * FROM usuarios where id= \". $id;\r\n$sth = $dbh-&gt;prepare($consulta);\r\nprint $consulta;\r\n$sth-&gt;execute();\r\n# Recorremos los resultados obtenidos de la base de datos \r\n\twhile($sth-&gt;fetch()) {\r\n\tprint \"$nombre - $apellido1\";\r\n\t}\r\n\r\n}\r\n\r\nsub Insertar_Datos\r\n{\r\n$id =$_[1];\r\n$nombre =$_[2];\r\n$apellido1 =$_[3];\r\n$edad =$_[4];\r\n$consulta = \"insert into usuarios values = ( \". $id. \",'\" .$nombre.\"','\".$apellido1.\"',\". $edad. \");\"; \r\n$sth = $dbh-&gt;prepare($consulta);\r\n$sth-&gt;execute();\r\n\r\n}\r\n\r\nsub Borrar_Datos\r\n{\r\n$id =$_[1];\r\n\r\n$consulta = \"delete from usuarios where id = \". $id;\r\n$sth = $dbh-&gt;prepare($consulta);\r\n$sth-&gt;execute();\r\n}\r\n\r\nsub Cerrar\r\n{\r\n$dbh-&gt;disconnect;\r\n}\r\n\r\n sub DESTROY {\r\n        my $self=shift; #El primer par\u00e1metro de un metodo es la  clase\r\n        delete ($self-&gt;{BASE});\r\n\t\tdelete ($self -&gt;{PUERTO});\r\n\t\tdelete ($self-&gt;{USUARIO});\r\n\t\tdelete ($self-&gt;{PASSWORD});\r\n\t\tdelete ($self-&gt;{HOST});\t\t\t\r\n        }\r\n\r\n  #Fin\r\n1;<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Sobre Perl<\/strong><\/p>\n<p style=\"text-align: justify;\">Perl tiene muchas y variadas aplicaciones, gracias a la disponibilidad de muchos m\u00f3dulos est\u00e1ndares y de terceras partes.<\/p>\n<p style=\"text-align: justify;\">Se ha usado desde los primeros d\u00edas del Web para escribir guiones (scripts) CGI. Es una de las &#8220;tres Pes&#8221; (Perl, Python y PHP), que son los lenguajes m\u00e1s populares para la creaci\u00f3n de aplicaciones Web, y es un componente integral de la popular soluci\u00f3n LAMP para el desarrollo web.<\/p>\n<p style=\"text-align: justify;\">Grandes proyectos escritos en Perl son Slash, IMDb6 y UseModWiki, un motor de Wiki.<\/p>\n<p style=\"text-align: justify;\">Muchos sitios web con alto tr\u00e1fico, como Amazon.com y Ticketmaster.com usan Perl extensamente.<br \/>\nPerl se usa a menudo como un &#8220;lenguaje pegamento&#8221;, ligando sistemas e interfaces que no fueron dise\u00f1ados espec\u00edficamente para interoperar; y para el &#8220;escarbado de datos&#8221;, convirtiendo o procesando grandes cantidades de datos para tareas como por ejemplo crear informes.<\/p>\n<p style=\"text-align: justify;\">De hecho, estas fortalezas est\u00e1n \u00edntimamente unidas. Su combinaci\u00f3n hace a Perl una popular herramienta de prop\u00f3sito general para los <strong>administradores de sistemas<\/strong>, especialmente en programas peque\u00f1os que pueden ser escritos y ejecutados en una sola l\u00ednea de comandos.<\/p>\n<p style=\"text-align: justify;\">\nPerl es tambi\u00e9n ampliamente usado en finanzas y bioinform\u00e1tica, donde es apreciado por su desarrollo r\u00e1pido, tanto de aplicaciones como de despliegue, as\u00ed como la habilidad de manejar grandes vol\u00famenes de datos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Para realizar el ejemplo es necesario el empleo de 2 ficheros. 1- Ejemplo.pl 2- MotorSGBD.pm Veamos el c\u00f3digo en el siguiente POST. &nbsp;<\/p>\n","protected":false},"author":1,"featured_media":487,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40,5],"tags":[59,37,58,44],"class_list":["post-478","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bases-de-datos","category-programacion","tag-bases-de-datos-2","tag-mysql","tag-perl","tag-programacion-2"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=478"}],"version-history":[{"count":19,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/478\/revisions"}],"predecessor-version":[{"id":498,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/478\/revisions\/498"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/487"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}