From jrey at linuxsis.net Wed Apr 4 08:23:23 2001 From: jrey at linuxsis.net (Jose Rey) Date: Wed Aug 4 23:59:23 2004 Subject: Smallest CSS decrypting program References: <200103281410.f2SEAbt11620@gocho.pm.org> Message-ID: <002601c0bd0a$827dd0a0$220ba8c0@hr.lxs> En un correo me enviaron este programita en perl, desafortunadamente no citaron la fuente y en vista de que puede ser util lo puse aqui. Alg?n voluntario para probarlo y/o verificar su correctitud ? ----------------- Coder Charles H. Hannum has created the smallest program capable of decoding a Content Scrambling System (CSS) DVD file, beating last week's seven-line Perl shell script 442 bytes to 472 (excluding newline bytes). /* efdtt.c Author: Charles M. Hannum */ /* */ /* Length: 434 bytes (excluding unnecessary newlines) */ /* */ /* Usage is: cat title-key scrambled.vob | efdtt >clear.vob */ #define m(i)(x[i]^s[i+84])<< unsigned char x[5],y,s[2048];main(n){for(read(0,x,5);read(0,s,n=2048);write(1,s ,n))if(s[y=s[13]%8+20]/16%4==1){int i=m(1)17^256+m(0)8,k=m(2)0,j=m(4)17^m(3)9^k *2-k%8^8,a=0,c=26;for(s[y]-=16;--c;j*=2)a=a*2^i&1,i=i/2^j&1<<24;for(j=127;++ jy)c+=y=i^i/8^i>>4^i>>12,i=i>>8^y<<17,a^=a>>14,y=a^a*8^a<<6,a=a>>8^y<<9, k=s [j],k="7Wo~'G_\216"[k&7]+2^"cr3sfw6v;*k+>/n."[k>>4]*2^k*257/8,s[j]=k^(k&k*2& 34) *6^c+~y;}} ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From jrey at linuxsis.net Thu Apr 5 08:16:21 2001 From: jrey at linuxsis.net (Jose Rey) Date: Wed Aug 4 23:59:23 2004 Subject: Smallest CSS decrypting program References: <200103281410.f2SEAbt11620@gocho.pm.org> <002601c0bd0a$827dd0a0$220ba8c0@hr.lxs> Message-ID: <001a01c0bdd2$aebc9430$220ba8c0@hr.lxs> Sorry, envie el programa sin prestarle suficiente atencion ! Cuando me puse a analizarlo me di cuenta que estaba en C ! ----- Original Message ----- From: Jose Rey To: Sent: Wednesday, April 04, 2001 9:23 AM Subject: Smallest CSS decrypting program > En un correo me enviaron este programita en perl, desafortunadamente no > citaron la fuente y en vista de que puede ser util lo puse aqui. Alg?n > voluntario para probarlo y/o verificar su correctitud ? ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Mon Apr 16 19:54:24 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: Pregunta de perl In-Reply-To: Message-ID: On Mon, 16 Apr 2001, Salvador Spataro wrote: > quisiera saber si existe forma (me imagino que si) de darle formato a los > numeros para que se vean con dos decimales y separadores de miles ?? > > 23334.34433553 > > a > 23.334,34 > > gracias de antemano Puedes poner los decimales con sprintf o haciendo uso de un formato #!/usr/bin/perl $n = 2334.34433553; $x = sprintf "%8.2f",$n; print "$x\n"; format = @#######.## $n . No existe ninguna condici?n de formato que permita poner las "," en Perl. Y la raz?n es obvia si uno ha trabajado lo suficiente con i18n, pero no viene al caso. Lo que puedes hacer es usar una expresi?n regular para ponerle las comas al n?mero justo antes de imprimirlo; lo que a mi me gusta hacer es tener una funci?n que hace precisamente eso: - Hago las posiciones decimales con sprintf o int. - Pongo las comas. #!/usr/bin/perl sub FormatNumber { my ($n,$d) = @_; if ($d > 0) { $n = sprintf("%.${d}f",$n); } else { $n = int($n+0.5); } 1 while ($n =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g); return $n; } print FormatNumber(2334.34433553,2), "\n"; -- Ernesto Hern?ndez-Novich - Running Linux 2.2.18 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Wed Apr 18 14:14:49 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: =?ISO-8859-1?Q?=BFC=F3mo_hacer_un_case_en_Perl=3F?= Message-ID: Ayer me preguntaron, "En C, se escribe char c; switch (c) { case 'a': ; break; case 'b': ; break; ... default : ; break; } ?c?mo hacerlo en Perl?" for ($c) { /^a$/ and do { ; last; }; /^b$/ and do { ; last; }; ... /^.$/ and do { ; last; }; } -- Ernesto Hern?ndez-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Wed Apr 18 14:19:05 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: Y ustedes creen que yo tengo problemas... Message-ID: Esta "belleza" adjunta es una de las cosas m?s espectaculares que he visto; no solamente corre en Perl sino que tambi?n corre en _Postscript_ sin ning?n cambio. -INICIO /;{}def/#{def}def/$_={/Times-Bold exch selectfont}#/_{rmoveto}#/"{dup}#/*/!/$ ;/q{exch}#/x ; {/J q #}#/.{/T q #}#{stringwidth}#{}#{}# 14 string dup dup dup 260 40 moveto 90 rotate ; %/}};$0='"\e[7m \e[0m"';@ARGV=split//,reverse q(ThePerl). q(Journal) x 220 ; q ; 0 T putinterval exch 7 J putinterval ; ; $_= q /m$ pop T($*!$"=!$ " )pop " * true% ? $ " $!" " !! !! % !" !" ! ! charpath {!"""}pop $ pop{""!}pop ! neg{!#}pop 220 ! neg _{!!}pop J false %T charpath clip " pop 0 " moveto 6{!!}pop $_= 105{!!}pop {$ ! $ " ! #! ##} pop{dup dup $ ! " pop pop q{"}pop 22{dup show}repeat {"}pop q 22 mul{$ "} pop neg{!#! $ "}pop ! 8 .65 mul{$ # # $}pop ! neg{"}pop _ pop{"}pop } repeat pop " { $ " ! ! ! $ " ! !" "#" #"!"""""! #" " # "m/;@ARGV=(@ARGV[-14..-1])x50;q} 0 "%};s/m[ou]|[-\dA-ln-z.\n_{}]|\$_=//gx;s/(.)(?{$*=''})/('$*.='.(++$# %2?'':"$0;").'pop;')x(ord($1)-31).'$*'/gee;s/((.(\e\[.m)*|.){77})/$1\n/g;print ; sub showpage {} -FINAL $ perl archivo y $ gv archivo -- Ernesto Hern?ndez-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From luisrrl at cantv.net Wed Apr 18 06:02:38 2001 From: luisrrl at cantv.net (Luis =?iso-8859-1?q?Rodr=EDguez?=) Date: Wed Aug 4 23:59:23 2004 Subject: Y ustedes creen que yo tengo problemas... In-Reply-To: References: Message-ID: <01041807023801.00945@localhost.localdomain> El Mi?rcoles 18 Abril 2001 15:19, Ernesto Hernandez-Novich escribi?: > Esta "belleza" adjunta es una de las cosas m?s espectaculares que he visto; > no solamente corre en Perl sino que tambi?n corre en _Postscript_ sin > ning?n cambio. Copi? y pegu?... $ gv archivo <--- Funciona $ perl archivo <--- No ?? ?Alg?n caracter de fin de l?nea introducido por el cliente de correo tal vez? Saludos. -- Luis Rodr?guez Puerto La Cruz PD: Me gustar?a mostrar esta y algunas otras proezas de Perl en el Demo Day de Puerto La Cruz. Revisar? lo que tengo del concurso de programaci?n ?ofuscada era?... Pero ?tendr?s algo por all? que se preste para la ocasi?n? ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From luisrrl at cantv.net Wed Apr 18 05:52:26 2001 From: luisrrl at cantv.net (Luis =?iso-8859-1?q?Rodr=EDguez?=) Date: Wed Aug 4 23:59:23 2004 Subject: =?iso-8859-1?q?=BFC=F3mo=20hacer=20un=20case=20en=20Perl=3F=20=5BOff?= Topic] In-Reply-To: References: Message-ID: <01041806522600.00945@localhost.localdomain> El Mi?rcoles 18 Abril 2001 15:14, Ernesto Hernandez-Novich escribi?: > ?c?mo hacerlo en Perl?" > > for ($c) { > /^a$/ and do { ; last; }; > /^b$/ and do { ; last; }; > ... > /^.$/ and do { ; last; }; > } Aaahh... !! era eso....!! Recien recib? tu mensaje en l-linux donde hablabas del case transparente de tu hermano e hiperventilado. No me di cuenta de que este otro era de pm. Susto... ?Hacer un case con Perl?... Cre? que era otra broma :-) Saludos. -- Luis Rodr?guez Puerto La Cruz ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From tony at tony.tzo.com Thu Apr 19 07:54:25 2001 From: tony at tony.tzo.com (Tony Rodriguez) Date: Wed Aug 4 23:59:23 2004 Subject: Y ustedes creen que yo tengo problemas... In-Reply-To: <01041807023801.00945@localhost.localdomain> References: <01041807023801.00945@localhost.localdomain> Message-ID: <01041908542501.06926@ns> No lo creo. A mi me funcionaron los dos. Que te dice cuando intentas perl archivo? Tony. El Mi? 18 Abr 2001 07:02, escribiste: > El Mi?rcoles 18 Abril 2001 15:19, Ernesto Hernandez-Novich escribi?: > > Esta "belleza" adjunta es una de las cosas m?s espectaculares que he > > visto; no solamente corre en Perl sino que tambi?n corre en _Postscript_ > > sin ning?n cambio. > > Copi? y pegu?... > > $ gv archivo <--- Funciona > > $ perl archivo <--- No ?? > > ?Alg?n caracter de fin de l?nea introducido por el cliente de correo tal > vez? > > Saludos. > > -- > Luis Rodr?guez > Puerto La Cruz > > PD: Me gustar?a mostrar esta y algunas otras proezas de Perl en el Demo > Day de Puerto La Cruz. Revisar? lo que tengo del concurso de programaci?n > ?ofuscada era?... Pero ?tendr?s algo por all? que se preste para la > ocasi?n? > ------------------------------------------------------------------------ > Enviar e-mail a colocando en el cuerpo: > "UNSUBSCRIBE caracas-pm-list" para desuscribirse. > "INFO caracas-pm-list" para conocer las reglas de etiqueta. > ------------------------------------------------------------------------ ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Fri Apr 20 10:13:56 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: Herramienta para Mass-Mailing en Perl In-Reply-To: <20010418052832.53060.qmail@web13901.mail.yahoo.com> Message-ID: On Tue, 17 Apr 2001, Alfredo Rahn wrote: > Si bien existen varios manejadores de listas que tienen esta opcion > (EzMLM, Majordomo, etc.), el servidor que me presta sus servicios no me > provee con ninguno de ellos. Instalarlos no es una opcion, como tampoco > lo es cambiarme de servidor. Puedes instalarte majordomo en tu directorio personal. Puedes pedir a los administradores que te hagan un alias de correo para asociarlo a majordomo. > Originalmente lo hacia con un sistema llamado PostLister (algo que baje > de FreshMeat), pero hace tiempo que se quedo corto y debo encontrar > algo mas > serio. Majordomo. > Luego, preciso hacer un programa que dada la lista de direcciones (por > ejemplo > en un archivo de texto plano) y el contenido del correo lo envie a > todos > los subscritos, de manera, por supuesto, que en el campo "To:" del > correo > no se vean las 100.000 direcciones sino solo aquella de quien esta > recibiendo. Hay un programa en perl que dada la lista de direcciones en un archivo plano y el contenido del correo, lo env?a a los suscritos y te permite todo tipo de "header munging" que se te ocurra. Puedes obtenerlo en http://www.greatcircle.com/majordomo > > Cuento con el Sendmail para enviar los correos. > > Otra restriccion es que no poseo acceso via Telnet, por lo cual > compilar > algo en C alla arriba me resulta complicado. ?Qu? tipo de hosting es ese? ?Son Nazis, Fascistas o Cobardes? > Por lo tanto, mi idea es desarrollar un script en Perl que ejecute la > tarea, > pero la unica forma que tengo de llamarlo es a traves de CGI. > > Venga entonces la amabilidad de los expertos en aclararme lo siguiente: > > 1. Como hago para que un script de Perl se clone (via fork() supongo?), > > y que el proceso hijo siga corriendo al tiempo que el padre (el CGI) > muere? > Podria alguien enviarme, si fuera posible, un snippet de codigo para > hacer tal cosa? Usas fork como se describe en man perlfunc. El proceso padre no debe esperar por sus hijos. La manera "a prueba de balas" de hacer fork con reintento es m?s o menos as?. FORK: { if ($pid = fork) { # Aqu? va el c?digo del padre. # $pid tiene el PID del _hijo_ } elsif (defined $pid) { # $pid is zero here if defined # Aqu? va el c?digo del hijo. # Si quieres el PID del padre usa getppid() } elsif ($! =~ /No more process/) { # EAGAIN, reintentar el fork sleep 5; redo FORK; } else { # Error fatal die "Can't fork: $!\n"; } } En el padre, no esperas (no uses wait). En el hijo debes ignorar la se?al de HUP para que cuando el padre muera, el hijo contin?e. Los detalles en man perlfunc. > 2. Que forma es mas eficiente (y por ende, menos voraz contra los > recursos > del sistema) de invocar el sendmail? Via sockets (al puerto 25) o con > un > 'open(OUT, "|/bin/sendmail -t" )'? Si vas a usar el sendmail _local_, el open() es la forma "correcta". Ahora, no tiene ninguna gracia que implementes SMTP y el RFC-822 en tu programa para componer los mensajes. Usa los m?dulos Mail disponibles en CPAN para componer el sobre, el cuerpo y hacer alguna manipulaci?n de los encabezados. Esto es, s?lo aquellos que no conocen CPAN har?an, open(SENDMAIL, "|/usr/lib/sendmail -oi -t -odq") or die "Can't fork for sendmail: $!\n"; print SENDMAIL <<"EOF"; From: E. S. Pammer To: Inocente Lector Subject: Esto no es SPAM, s?lo molestamos sin raz?n previa Todo el cuerpo del mensaje aqu? EOF close(SENDMAIL) or warn "sendmail didn't close nicely"; lo cual es lamentable, porque con bajarse Mail::Mailer pueden hacer, use Mail::Mailer; $mailer = Mail::Mailer->new("sendmail"); $mailer->open({ From => $from_address, To => $to_address, Subject => $subject, }) or die "Can't open: $!\n"; print $mailer $body; $mailer->close(); es tan simple como eso. CPAN (Comprehensive Perl Archive Network) es accesible en http://www.perl.com > 3. Hay algun truco para que sendmail sea mas rapido procesando los > mensajes? > Ordenarlos por dominio de destino ayudaria en algo? Cuantos recipients > puedo poner en un mismo mensaje? Ordenarlos por e-mail es necesario previo a 8.9; majordomo lo hace por t? hasta cierto punto. La cantidad de destinatarios depende de algunos par?metros de configuraci?n de sendmail (que en general nadie usa, as? que en la pr?ctica est? limitado por la cantidad de memoria disponible). > 4. Hay algun sistema que ya haga esto que yo quiero? Alguna experiencia Majordomo. Exempli gratia. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From mendoza at kitiara.org Mon Apr 23 09:38:05 2001 From: mendoza at kitiara.org (Cesar Mendoza) Date: Wed Aug 4 23:59:23 2004 Subject: Perl vs PHP (P) In-Reply-To: ; from emhn@telcel.net.ve on Sat, Apr 21, 2001 at 01:00:08PM -0400 References: Message-ID: <20010423093805.A9001@tyka.kitiara.com> On Sat, Apr 21, 2001 at 01:00:08PM -0400, Ernesto Hernandez-Novich wrote: > On Fri, 20 Apr 2001, Rafael Flores Del Valle wrote: > Olvid? agregar que en caracas-pm-list@pm.org de vez en cuando nos > dedicamos a explorar aspectos interesantes de Perl. NO es una lista > introductoria, no tiene FAQ, no tiene archivo y a veces parece > que ni siquiera tiene miembros . Bueno archivo de lista ya tiene y esta en: http://www.kitiara.org/Lists-Archives Y dado que esta es una lista de perl, que tal un poquito de perl trivia: Uno de las cosas que ha echo de perl el lenguaje que es hoy es la contribucion de cantidad de ususarios con modulos que se encuentra en CPAN (Comprehensive Perl Archive Network[1]). Ademas del archivo en la web, existe un modulo de perl llamado CPAM.pm para accesar este archivo y poder hacer busquedas e instalaciones de modulos. el comando para usarlo es: perl -MCPAN -e shell para mas informacion: man CPAN y para los que no tienen el modulo instalado lo pueden bajar en: http://www.cpan.org/authors/id/ANDK/CPAN-1.59_54.tar.gz Para instalarlo: tar xvzf CPAN-1.59_54.tar.gz cd CPAN-1.59_54 perl Makefile.PL make make test make install Bye Cesar Mendoza http://www.kitiara.org -- "A scientist once wrote that all truth passes through three stages: first it is ridiculed, then violently opposed and eventually, accepted as self-evident." --Source Unknown [1] http://www.perl.com/CPAN-local/README.html ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Mon Apr 23 10:50:44 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: Algunos enlaces interesantes... Message-ID: Algunos enlaces interesantes para el trabajo con Perl. No son exhaustivos, pero cumplen. http://www.perl.com Sitio oficial de Perl y acceso al CPAN. http://www.perl.org Perl Mongers (Perl Advocacy People). En particular es excelente el contenido para explicar a otras personas qu? es Perl, su historia, sus ventajes, etc. http://www.perlmonks.org Buen lugar para obtener ejemplos de c?digo y/o intercambiar opiniones con la comunidad de usuarios Perl. En ocasiones se pueden leer notas o sugerencias de Randall Schwartz, Jarkko Hietaniemi y hasta del propio Larry. http://use.perl.org Noticias alrededor de la comunidad Perl (El Slashdot de Perl :-) http://perl.apache.org La p?gina de mod_perl. Si est?s usando Apache y Perl sin mod_perl, s?lo experimentas el 1% del performance :-) http://www.perlmonth.com La "revista en l?nea". Buenos art?culos con ejemplos pr?cticos concretos en el uso de Perl; gran ?nfasis en su integraci?n con mod_perl... pero bastante variada. http://perl.plover.com Perl Paraphernalia de Mark-Jason Dominus. Esta p?gina _no_ es apta para "todo p?blico"; se han visto adultos romper en llanto luego de leer durante cinco minutos . Aqu? encuentran lo que ocurre cuando un experto en lenguajes de programaci?n y sem?ntica denotacional entra en contacto con el^H^Hun lenguaje m?s^H^H^Htan poderoso. http://world.std.com/~swmcd/steven/perl/ Perl Module Mechanics. Un tutorial ultra-conciso acerca de la creaci?n de m?dulos Perl (orientados por objeto o no). Ideal para principiantes. http://gisle.aas.no/perl/illguts/ PerlGuts Illustrated. Si alguna vez hicieron man perlguts y no entendieron un cuerno... cuando visiten ?sta p?gina tampoco van a entender nada, pero tiene grafiquitos . Es una descripci?n del ambiente de ejecuci?n de Perl en cuanto al mantenimiento de su tabla de s?mbolos y las estructuras de datos que mantiene para hacer la magia de manejo de datos. Ni un s?lo tip de programaci?n, ojo. http://www.webreference.com/perl/ The Mother of Perl. Publicaci?n peri?dica con tips de programaci?n Perl y uno que otro script "baje y use". -- Ernesto Hern?ndez-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Mon Apr 23 12:34:22 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: Perl vs PHP (P) In-Reply-To: <20010423093805.A9001@tyka.kitiara.com> Message-ID: On Mon, 23 Apr 2001, Cesar Mendoza wrote: > On Sat, Apr 21, 2001 at 01:00:08PM -0400, Ernesto Hernandez-Novich wrote: > > On Fri, 20 Apr 2001, Rafael Flores Del Valle wrote: > > Olvid? agregar que en caracas-pm-list@pm.org de vez en cuando nos > > dedicamos a explorar aspectos interesantes de Perl. NO es una lista > > introductoria, no tiene FAQ, no tiene archivo y a veces parece > > que ni siquiera tiene miembros . > Bueno archivo de lista ya tiene y esta en: > http://www.kitiara.org/Lists-Archives Muchas gracias. En mensaje privado te env?o algunos de los mensajes pasados que tengo en mi buz?n. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Mon Apr 23 15:32:25 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: =?ISO-8859-1?Q?=BFMe_indican_d=F3nde_encuentro_un_tutorial=3F?= =?ISO-8859-1?Q?_=BFCu=E1les_libros_son_buenos=3F?= Message-ID: Esta es la otra pregunta frecuente, as? que aprovecho de terminar con la lista de URLs ?tiles para Perl. http://www.phlab.missouri.edu/things/instruction/perl/perlcourse.html Un curso _muy_ b?sico de Perl para alguien que programe en alg?n lenguaje cuyo nombre no incluya la palabra "Visual" y en el cual la relaci?n clicks/comandos se acerque a cero . http://www.malibutelecom.com/yucca/perl/course.html Una copia del anterior, con algunos comentarios adicionales. Incluye una lista con los "errores comunes" del novato. http://www.ebb.org/PickingUpPerl/pickingUpPerl.html Otro tutorial bastante completo como para obtener una visi?n general del lenguaje. Tiene la ventaja de que est? en _un_ s?lo documento para los que no quieren estar en l?nea leyendo. http://www.cm.cf.ac.uk/Dave/PERL/ Otro tutorial en l?nea, en varios documentos con navegaci?n. http://www.geocities.com/SiliconValley/7331/ten_perl.html Aprenda Perl en diez minutos (no incluye instrucciones de instalaci?n). Se recomienda el uso de equipo protector http://prometheus.frii.com/~gnat/yapc/2000-stages/ Un tutorial con excelente sentido del humor... ?ub?quense en el escalaf?n! _Nunca_ van a encontrar algo similar en la comunidad Python (qu? l?stima). En mi opini?n, la bibliograf?a definitiva del lenguaje en orden sugerido de lectura es Learning Perl (300 p?ginas, conocido como "Llama") Randall Schwartz y Tom Christiansen Programming Perl 3ra. Edici?n (1092 p?ginas, conocido como "Camel") Larry Wall, Tom Christiansen & John Orwant Perl Cookbook (791 p?ginas, conocido como "Ram") Tom Christiansen y Nathan Torkington Advanced Perl Programming (427 p?ginas, conocido como "Panther") Sriram Sirivasan despu?s de eso, no hace falta ning?n otro libro (simplemente actualizar el segundo, consultar el tercero cual "chuletario" y recuperar la inversi?n revendiendo el primero :-). Todos los detalles est?n en http://perl.oreilly.com/ -- Ernesto Hern?ndez-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From sspataro at cantv.net Tue Apr 24 06:52:09 2001 From: sspataro at cantv.net (Salvador Spataro) Date: Wed Aug 4 23:59:23 2004 Subject: case en perl Message-ID: Transcribo el mensaje de Ernesto: Ayer me preguntaron, "En C, se escribe char c; switch (c) { case 'a': ; break; case 'b': ; break; ... default : ; break; } ?c?mo hacerlo en Perl?" for ($c) { /^a$/ and do { ; last; }; /^b$/ and do { ; last; }; ... /^.$/ and do { ; last; }; } -- no entiendo ?como funciona? Me parec?o el mejor lugar para preguntar (y hacer un poquito de tr?fico) Se despide Salvador ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From naterajj at telcel.net.ve Tue Apr 24 19:28:11 2001 From: naterajj at telcel.net.ve (Juan Jose Natera Abreu) Date: Wed Aug 4 23:59:23 2004 Subject: case en perl References: Message-ID: <3AE61A1B.CD63B497@telcel.net.ve> Hola, > for ($c) { > /^a$/ and do { ; last; }; > /^b$/ and do { ; last; }; > ... > /^.$/ and do { ; last; }; > } La cosa es asi, la primera linea es un for que evalua el valor de $c, obvio... Al evaluar $c, la variable $_ toma el valor de esta, $_ es una variable implicita para muchas operaciones, las que requieren un solo operando y la de busqueda de patrones (como en este caso cuando se hace un /^a$/) y otras cosas mas... man perlvar Entonces las lineas /algo/ and do {...} estan buscando una coincidencia de la variable $c a traves de $_. La primera busca una cadena que empiece por 'a', termine por 'a' y tenga un solo caracter (i.e case 'a'), si eso es cierto ejecuta el codigo del 'do' y luego se sale del 'for' gracias a la instruccion 'last;' que esta al final del 'do'. Lo que significa que no sigue evaluando el valor de $c y termina el ciclo. Si $c no es igual a 'a' entonces evalua la sieguiente opcion y asi sucesivamente hasta ejecuta el codigo por defecto, el /^.$/ significa cualquier caracter y al ponerlo de ultimo nos aseguramos que no haga match antes de tiempo, ?no es muy complicado verdad? La cosa es que se usan abreviaciones tipicas de perl que son un poco confusas si no has visto/hecho un poco de codigo. Otra cosa interesante es el 'and' entre el matching y el 'do' Sirve para ejecutar codigo dependiendo de una condicion y se usa mucho, tambien el 'or', un ejemplo tipico es: open (F,"$miarchivo") or die "no puse abrir el archivo $miarchivo\n"; En otras palabras abre el archivo tal y da un mensaje de error si no puedes... Saludos, Juan Jos? ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Wed Apr 25 09:11:28 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: Se ha determinado que no usar map es nocivo para la salud Message-ID: Pre?mbulo: - Esto es un hash expl?cito porque tiene nombre (%h). %h = ( clave0 => valor0, clave1 => valor1, ... , claveN => valorN ); print $h{clave0} devuelve valor0 - Esto es un hash impl?cito, sin nombre del cual se tiene una _referencia_. $rh = { clave0 => valor0, clave1 => valor1, ..., claveN 0> valorN ); print $rh->{clave0} devuelve valor0 N?tese que $rh no es el hash sino un "apuntador" al hash, por lo tanto debo usar "->" para hacer la indirecci?n. La funci?n map es una de las m?s poderosas de Perl. Representa un ciclo impl?cito que opera sobre una lista, y que permite iterar sobre los elementos de est? aplicando una funci?n; para los que hemos experimentado con lenguajes funcionales es de lo m?s natural y poderos?simo porque permite operar distributivamente sobre las estructuras de datos. En general, si uno tiene una lista @l y quiere aplicar la funcion f() a todos sus elementos tiene dos opciones: a. Si se es un programador "standard" con mentalidad procedural, se apela a un algoritmo de la forma. foreach $e (@l) { push(@r,f($e)); } @l = @r; En otras palabras, proceso iterativamente cada elemento, para lo cual necesito un ciclo expl?cito, una variable intermedia para moverme, un arreglo intermedio para los resultados, y una copia de arreglo al final. Pat?tico. b. Si se es un programador que ha sido introducido al "maravilloso mundo del map", se apela a @l = map { f($_) } @l; Si, as? de simple. Ahora, algunos ejemplos cl?sicos de uso de map que no solamente ahorran espacio, sino tambi?n _mucho_ tiempo. 0. Eliminar los duplicados de una lista: @a = ( 'uno', 'dos', 'dos', 'tres', 'uno', 'cuatro', 'dos' ); @a = keys %{ { map { $_ => 1 } @a } }; Tomo la lista y construyo un hash impl?cito cuya clave son los elementos de la lista. Luego obtengo las claves de este hash, que obviamente son los elementos ?nicos de la lista original. 1. Obtener la uni?n de dos listas, i.e. los elementos que est?n en @a agregando los elementos que est?n en @b, sin duplicados: @a = ( 'uno', 'dos', 'dos', 'tres', 'uno', 'cuatro', 'dos' ); @b = ( 'dos', 'tres', 'cuatro', 'ocho', 'nueve' ); @i = keys %{ { map { $_ => 1 } (@a,@b) } }; Deber?a ser obvio en base al ejemplo 0. 2. Determinar si un elemento est? en una lista: $buscar = 'cuatro'; @a = ( 'dos', 'tres', 'ocho', 'cuatro', 'once', 'dos' ); if ( { map { $_ => 1 } @a }->{$buscar} ) { print "Si"; } else { print "No"; } Tomo la lista y construyo un hash impl?cito cuya clave son los elementos de la lista. Luego dereferencio el hash para ver si la clave del elemento a buscar existe. 3. Obtener la diferencia de dos listas @a y @b, i.e. @a - @b, los elementos de @a que _no_ est?n en @b (diferencia de conjuntos :-). @a = ( 'uno', 'dos', 'tres', 'cuatro', 'cinco' ); @b = ( 'dos', 'cuatro', 'seis', 'ocho' ); @d = map { { map { $_ => 1 } @b }->{$_} ? () : $_ } @a; (De adentro hacia afuera). Tomo la lista @b y construyo un hash impl?cito cuya clave son los elementos de la lista. Luego tomo la lista @a y verifico si en el hash impl?cito de @b existe un elemento cuya clave sea el elemento de @a, si es as? devuelvo una lista vac?a, en caso contrario devuelvo el elemento de @a. Escriban los mismos algoritmos proceduralmente y luego comparen las velocidades... ya ver?n por qu? map es su amigo. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From mendoza at kitiara.org Thu Apr 26 11:05:24 2001 From: mendoza at kitiara.org (Cesar Mendoza) Date: Wed Aug 4 23:59:23 2004 Subject: Ocultar =?iso-8859-1?Q?c=F3dig?= =?iso-8859-1?Q?o?= de Perl In-Reply-To: <01042610585102.01466@venezuelasite.localdomain>; from gb@venezuelasite.net on Thu, Apr 26, 2001 at 10:58:51AM -0400 References: <20010426131249.14999.qmail@web13908.mail.yahoo.com> <01042610585102.01466@venezuelasite.localdomain> Message-ID: <20010426110524.A24260@tyka.kitiara.com> On Thu, Apr 26, 2001 at 10:58:51AM -0400, Gilberto Balza wrote: > Salud2 lista ... > > ?Existir? alguna forma de ocultar un archivo en perl? > man perlfaq3 y busca por hide. Pero te advierto que la respuesta no te va a gustar. Bye Cesar Mendoza http://www.kitiara.org -- "First they tell you, you're wrong and they can prove it; then they tell you, you're right but it isn't important; then they tell you, it's important but they knew it all along." --Charles Kettering ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Fri Apr 27 09:38:17 2001 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:23 2004 Subject: =?ISO-8859-1?Q?Estilo_de_programaci=F3n?= Message-ID: Larry Wall, el autor de Perl, es fundamentalmente un especialista en ling??stica antes que un especialista en lenguajes de programaci?n. Esto, aunque suene contradictorio, ha sido muy beneficioso porque la sintaxis de Perl ha sido definida para que se asemeje al lenguaje natural. Es por eso que existen variadas "formas comunes" (idioms en ingl?s) que son sumamente concisas y que le dan claridad a los programas si uno los interpreta en lenguaje natural. Siempre me ha parecido una excelente idea aprender y preferir estas formas comunes antes que las tradicionales que uno adopta de otros lenguajes. Programar de forma _concisa_, evitando la _redundancia_ y aumentando la _claridad_ son se?al de profesionalismo (y de flojera, por supuesto :-). Perl es el lenguaje ideal para lograrlo, como lo muestran algunos ejemplos. - En lugar de escribir if ($i == 0) { ... } o if (! ) { ... } es mucho m?s conciso y natural escribir unless ($i) { ... } o unless () { ... } - Aquellos que tienen una fuerte tendencia C/C++ escriben for (my $j = 0; $j <= 10; $j++) { ... } siendo que en Perl es mucho m?s conciso y elegante escribir for my $j (0..10) { ... } - C?digo como if ($debug) { } ocupa m?s espacio e interfiere con el contexto. Es mucho mejor escribir if ($debug); (que, de paso, lo pueden combinar con el primer tip de usar unless en los casos apropiados). - En lugar de escribir cosas como $resultado = if (! $resultado ) { } queda mejor escribir or que es el t?pico idioma para cosas como open(X,"archivo") or die "archivo no existe" El 'or' puede sustituirse por '||' que es equivalente. Programas m?s cortos, claros y eficientes derivan de utilizar Perl "como si fuera ingl?s" para expresar las soluciones a los problemas que se intenta resolver. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.2 i686 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*++++$ P++++$ L+++$ E- W+ N++ o K++ w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G++ e++ h r++ y+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------