{"id":15,"date":"2004-10-24T02:36:57","date_gmt":"2004-10-24T09:36:57","guid":{"rendered":"http:\/\/www.gubatron.com\/blog\/?p=15"},"modified":"2020-05-14T14:55:32","modified_gmt":"2020-05-14T14:55:32","slug":"detalles-de-perl-que-no-quiero-olvidar","status":"publish","type":"post","link":"https:\/\/www.gubatron.com\/blog\/detalles-de-perl-que-no-quiero-olvidar\/","title":{"rendered":"Detalles de Perl que no quiero olvidar"},"content":{"rendered":"<p>Quisiera dejar anotado en el blog, algunos detalles \u00fatiles que recuerdo aprend\u00ed finalmente cuando estuve programando en PERL para Straec Technologies.<\/p>\n<p>A modo de manejo de conocimiento, y para que esto quede indexado en los buscadores, voy a anotar aqui algunas m\u00e1ximas, y detallitos bien utiles cuando estas programando algo grande, y necesitas pasar estructuras de datos mas complejas que variables&#8230; digamos, tienes que pasar un Arreglo de Hashes, o un Arreglo de Arreglos, o un Hash de Arreglos, o un Hash de Hashes&#8230;<\/p>\n<hr \/>\n<p>Nota: Un hash es un arreglo asociativo en PHP, o lo analogo a un Hashmap o Hashtable en Java. En perl se definen asi:<br \/>\n<code>my %hash; #se definen con el % adelante<br \/>\n$hash['direccion'] = \"Casa #4, Calle 34 Oeste\"; #Se usan como arreglos<br \/>\n$hash[nombre] = \"Epale\"; #No hace falta poner la clave en comillas<br \/>\n$hash[edad] = 12; #Pueden tener cualquier tipo de datos, incluyendo referencias a arreglos, u otros hashes<br \/>\n$hash[otroHash] = %otroHash; #Ej de referencia a un hash<br \/>\n%hash = {'direccion'=&gt;'Una direccion', 'fecha'=&gt;time()} #Creo que es asi la sintaxis para inicializarlo de una con varios elementos.<\/p>\n<h2><\/code><\/h2>\n<p><img decoding=\"async\" src=\"http:\/\/www.wedoit4you.com\/elinks\/show_image.php?Image_pk_id=818&amp;thumb=1&amp;img_height=400\" alt=\"\" \/><\/p>\n<p>Todas estas cosas es mejor que las manejes con REFERENCIAS&#8230; que es algo asi como apuntadores. Si manejas bien las referencias, vas a entender mucho m\u00e1s f\u00e1cil otras cosas en Perl.<\/p>\n<p>1) Las funciones o &#8220;sub&#8221; rutinas en perl, pueden devolver arreglos, pero no pueden devolver hashes.<\/p>\n<p><code><br \/>\nsub devuelveArreglo {<br \/>\nmy @arreglo;<br \/>\n...<br \/>\nreturn @arreglo; #Esto funciona perfect<br \/>\n}<br \/>\n<\/code><\/p>\n<p><code><br \/>\nsub devuelveHash {<br \/>\nmy %hash;<br \/>\n...<br \/>\nreturn %hash; #Esto no te va a funcionar si intentas agarrar el hash<br \/>\n}<br \/>\n<\/code><br \/>\n<code><br \/>\n#Tienes que devolver una referencia del hash<br \/>\nsub devuelveHash {<br \/>\nmy %hash;<br \/>\n...<br \/>\nreturn \\%hash; #Asi si!<br \/>\n}<\/code><br \/>\n<code><br \/>\n#Luego utilizas la referencia del hash asi<br \/>\nmy $ref_de_hash = devuelveHash();<br \/>\nmy %hash = %$ref_de_hash; #Lo que nos lleva al pr\u00f3ximo punto.<br \/>\n<\/code><\/p>\n<p>2) Como des-referenciar<br \/>\n<code><br \/>\nmy @arreglo = @$ref_arreglo;<br \/>\nmy @hash = %$ref_hash;<br \/>\nmy $variable = $$variable;<br \/>\n<\/code><br \/>\nSimplemente se antepone el operador que representa el tipo de variable que estas des-referenciando. Sencillo. Y bueno, ya se vio que para crear referencias se utiliza el operador<\/p>\n<p>3) Si tienes una funcion que recibe N variables y un arreglo. PON EL ARREGLO DE ULTIMO PARAMETRO<\/p>\n<p><code><br \/>\nsub miFuncion {<br \/>\nmy ($param1,$param2,...,$paramN,@paramArreglo) = (shift,shift,...,shift,shift);<br \/>\n}<br \/>\n<\/code><\/p>\n<p>Si la funcion debiera recibir 2 arreglos como hago????<br \/>\nEste es el momento de utilizar referencias. En vez de pasar 2 arreglos,<br \/>\npasale a la funcion 2 referencias a arreglos. Esta puede ser la solucion si te parece que es m\u00e1s elegante poner el arreglo como primer parametro.<\/p>\n<p>Del resto hay muchas otras lecciones con variables predeterminadas de PERL, pero esas las usas cuando est\u00e1s programando, y son m\u00e1s que todo cosas que puedes encontrar en cualquier sitio web. A veces encontrar documentacion de Referencias y DesReferencias en Espa\u00f1ol me supongo que es dificil, asi que decidi documentar esto porque antes de irme de Straec finalmente entend\u00ed completamente como funcionaban las referencias, y me fueron muy utiles para hacer cosas complejas, ya que no estabamos utilizando un approach orientado a objetos, y todo se tenia que resolver fumandotela con arreglos y hashes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quisiera dejar anotado en el blog, algunos detalles \u00fatiles que recuerdo aprend\u00ed finalmente cuando estuve programando en PERL para Straec Technologies. A modo de manejo de conocimiento, y para que esto quede indexado en los buscadores, voy a anotar aqui algunas m\u00e1ximas, y detallitos bien utiles cuando estas programando algo grande, y necesitas pasar estructuras [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[33],"tags":[],"class_list":["post-15","post","type-post","status-publish","format-standard","hentry","category-gubatron"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5Unzf-f","jetpack-related-posts":[{"id":254,"url":"https:\/\/www.gubatron.com\/blog\/create-base32-sha1-hashes-out-of-files-in-php-5\/","url_meta":{"origin":15,"position":0},"title":"Create Base32 SHA1 hashes out of files in PHP 5","author":"gubatron","date":"February 9, 2006","format":false,"excerpt":"LimeWire and other Gnutella clients uniquely identify files by creating a SHA1 hash of the files. I thought that it might be useful to the gnutella network to have regular webservers sharing legal files. Usually regular Joe webmasters don't have permissions to run java programs or have tcp ports open\u2026","rel":"","context":"In &quot;Code&quot;","block_context":{"text":"Code","link":"https:\/\/www.gubatron.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":515,"url":"https:\/\/www.gubatron.com\/blog\/php-ordenando-un-arreglos-de-objectos-y-utilizando-funciones-dentro-de-funciones\/","url_meta":{"origin":15,"position":1},"title":"PHP, ordenando un arreglo de Objetos, y utilizando funciones dentro de funciones.","author":"gubatron","date":"May 6, 2007","format":false,"excerpt":"No fue hasta que programe en Python que me habia pillado que podia definir funciones dentro de funciones en PHP. Hoy tuve que arreglar un defecto en el home de wedoit4you.com del cual algunos bloggers se estaban aprovechando para permanecer en el home. Los articulos aparecen ordenados por fecha de\u2026","rel":"","context":"In &quot;Code&quot;","block_context":{"text":"Code","link":"https:\/\/www.gubatron.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":85,"url":"https:\/\/www.gubatron.com\/blog\/2-programitas-utiles-mientras-desarrollas-en-linux\/","url_meta":{"origin":15,"position":2},"title":"2 programitas utiles mientras desarrollas en Linux","author":"gubatron","date":"December 29, 2004","format":false,"excerpt":"Para los desarrolladores que utilizan lenguajes de programacion como Perl, o PHP, a continuacion, un programita bien util. Supon que tienes un archivo .php donde tienes definidas un monton de funciones. Y no te acuerdas que funciones estaban ahi, lo mas probable es que tengas que abrir el archivo y\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1687,"url":"https:\/\/www.gubatron.com\/blog\/geek-t-shirt-collection-19-perl-use-strict-thinkgeek-com\/","url_meta":{"origin":15,"position":3},"title":"Geek T-Shirt Collection #19 &#8211; perl &#8211; use strict &#8211; thinkgeek.com","author":"gubatron","date":"February 14, 2010","format":false,"excerpt":"See the Previous T-Shirt See the Next T-Shirt","rel":"","context":"In &quot;Geeklife&quot;","block_context":{"text":"Geeklife","link":"https:\/\/www.gubatron.com\/blog\/category\/geeklife\/"},"img":{"alt_text":"Geekshirt #19 - perl - use strict - thinkgeek.com","src":"https:\/\/i0.wp.com\/farm4.static.flickr.com\/3536\/3314683586_cce3f3e127.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":17,"url":"https:\/\/www.gubatron.com\/blog\/underground-del-it-staffing-en-usa\/","url_meta":{"origin":15,"position":4},"title":"Underground del IT Staffing en USA","author":"gubatron","date":"October 29, 2004","format":false,"excerpt":"Se\u00f1ores, sigo perseverando en mi b\u00fasqueda de empleo como desarrollador aqui en NY. Resulta que hice un reformateo de mi curriculum con la ayuda de mi colega y amiga la Ing. Maritza Martinez (quien reside aqui en NY y tambien es graduada de la UCA Empez\u00e9 a enviar el curriculum,\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2767,"url":"https:\/\/www.gubatron.com\/blog\/ubuntu-packages-for-a-kick-ass-web-server\/","url_meta":{"origin":15,"position":5},"title":"ubuntu packages for a kick ass web server","author":"gubatron","date":"September 7, 2012","format":false,"excerpt":"Copy and paste the following list on a file, say \"packages.txt\". To install all just do: sudo apt-get install $(cat packages.txt) accountsservice acpid adduser ant ant-optional apache2-utils apparmor apport apport-symptoms apt apt-transport-https apt-utils apt-xapian-index aptitude at base-files base-passwd bash bash-completion bc bind9-host bsdmainutils bsdutils busybox-initramfs busybox-static byobu bzip2 ca-certificates ca-certificates-java\u2026","rel":"","context":"In &quot;Code&quot;","block_context":{"text":"Code","link":"https:\/\/www.gubatron.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/15","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/comments?post=15"}],"version-history":[{"count":1,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/15\/revisions"}],"predecessor-version":[{"id":3890,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/15\/revisions\/3890"}],"wp:attachment":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/media?parent=15"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/categories?post=15"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/tags?post=15"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}