[bcn-pm] Resum de Barcelona-pm, vol 117, número 6

Sergio González Rodríguez sergiogoro86 a gmail.com
dll abr 15 01:35:09 PDT 2013


Vaya,
Menuda ayuda completa, pues clarísimo todo chicos.

Muchísimas gracias ;)

Use BCN::PerlMongers  # :D


El 12 de abril de 2013 21:00, <barcelona-pm-request en pm.org> escribió:

> Envieu les aportacions de Barcelona-pm a la llista de correu a
>         barcelona-pm en pm.org
>
> Per a subscriure-us o cancel·lar subscripcions a través de la web,
> aneu a
>         http://mail.pm.org/mailman/listinfo/barcelona-pm
> o bé, si voleu utilitzar el correu electrònic, envieu un missatge
> amb la paraula «help» a l'assumpte o al cos del missatge, adreçat a
>         barcelona-pm-request en pm.org
>
> Podeu dirigir-vos a la persona encarregada de la gestió de la llista
> a
>         barcelona-pm-owner en pm.org
>
> En respondre, és recomanable que editeu la línia de l'Assumpte, de
> manera que sigui més específica que "Re: Contents of Barcelona-pm
> digest..."
>
>
> Temes d'avui:
>
>    1. Re: Curso; dudas(regex, substr vs unpack, subrutinas)
>       (Alejandro Exojo)
>    2. Re: Curso; dudas(regex, substr vs unpack, subrutinas)
>       (Gonzalo Pérez de Olaguer Córdoba)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Thu, 11 Apr 2013 23:39:44 +0200
> From: Alejandro Exojo <suy en badopi.org>
> To: barcelona-pm en pm.org
> Subject: Re: [bcn-pm] Curso; dudas(regex, substr vs unpack,
>         subrutinas)
> Message-ID: <201304112339.45516.suy en badopi.org>
> Content-Type: Text/Plain;  charset="iso-8859-15"
>
> El Jueves, 11 de abril de 2013, Sergio González Rodríguez escribió:
> > ¡Hola mongers!
> >
> > Varias cosas:
> >
> > 1) Agradeceros la repetición del curso
> >
> > foreach my $persona (@personasQueHicieronPosibleElCurso) {
> >     print "Gracias $persona ;)\n";
> > };
>
> Este es el primer correo que mando, y decir que también hice el curso, y
> que
> me ha picado mucho la curiosidad, y estoy pasándomelo bien convirtiendo mi
> blog a Mojolicious. Está siendo una experiencia interesante. :)
>
> Aunque yo lo diría:
>
> say "¡Gracias $_!" foreach @personasQueHicieronPosibleElCurso; # ;-)
>
> Voy a intentar responderte para afianzar mis conocimientos, pero no te lo
> tomes
> nada en serio, porque he escrito unos 3 programas en Perl hasta la fecha.
> :-)
>
> > 2) Tengo unas cuantas dudas, espero que no sean muy noobs ni rebuscadas y
> > os entretengáis echándome un cable, os lo agradeceré:
> >
> > 2.1) substr vs unpack
> >
> > En el Perl cookbok (cap.1 accessing substrings:
> > http://docstore.mik.ua/orelly/perl/cookbook/ch01_02.htm ) dice que
> podemos
> > usar unpack para extraer substrings más rapidamente que con substr.
> >
> > Teniendo una $cadena = 'cadena de texto'
> > Podemos extraer el 'de' así:
> >     substr($cadena, 6, 3);
> >     o asi
> >     unpack("x7 A2", $cadena);
> >
> > He mirado el perldoc de unpack(
> > http://perldoc.perl.org/functions/unpack.html ), y otro tutorial(
> > http://www.perlmonks.org/?node_id=557655 )
> > y no me queda nada claro "de qué va el unpack..." simplemente que es más
> > rápido que el substr porque lo dice el cookbook...
> >
> > El debate sería: ¿Qué os parece usar el unpack como en este ejemplo
> frente
> > al substr? ¿Lo usáis? ¿Cuando y cuando no?
>
> Yikes! Ni flores, pero por lo que entiendo de la documentación de pack(),
> parece estar más orientado a bytes que a cadenas. Pensar en bytes (i.e. 8
> bits), es un error en estos días en que el texto está muy frecuentemente en
> utf-8. En utf-8 el texto de un sólo carácter puede ocupar 1, 2, o más
> bytes.
> La Ñ, la Ç, etc., ocuparán 2 bytes, por ejemplo. Si estás pensando en
> cadenas,
> creo que lo correcto es usar substr.
>
> > 2.2) Llamadas a subrutinas
> > marine();
> > o
> > &marine();
> >
> > ¿simple cuestión de estilo o tiene alguna otra implicación?
>
> Por lo que he ido leyendo, el & es innecesario estos días, salvo en
> situaciones que raramente vayamos a ver. Es más, si no me suena mal del
> Modern
> Perl, puede hacer que se comporte de manera diferente. Conclusión: no lo
> uses
> salvo que realmente sepas lo que estás haciendo.
>
> > 2.3)Expresiones regulares
> > Leyendo de un archivo con líneas que contienen lo siguiente:
> > FBtr123;blablabla
> > Y
> > FBtr123,FBtr567,FBtr120;blabla
> >
> > Para almacenar estos match estoy haciendo:
> > push(@FBtr, $1) if ($line=~/(FBtr\d+);/ || $line=~/(FBtr\d+,.+);/ )
> > #guardar un match si sólo hay uno, y guardarlos todos si sólo
> > ¿Es esto lo mejor?
> >
> > ¿o seria mejor así?
> > push(@FBtr, $1) if ($line=~/(FBtr\d+);||(FBtr\d+,.+);/ )
> >
> > *empecé a descubrir algo de los lookahead,  y pensé que podría
> > implementarlo para ver si hay 'un solo fbtr'  o 'más de uno' pero creo
> que
> > también eso sería liar el rizo innecesariamente ¿os parece?
>
> En esto sí que no sé que decir porque no estoy seguro de lo que estás
> buscando
> exactamente. Tampoco ayuda que, al ponerlo todo en una línea, si no sabes
> claramente lo que quería hacer el que lo ha escrito, es difícil. :-)
>
> Aún estoy acostumbrado a usar llaves para marcar todos los bloques
> explícitamente, salvo que sea algo muy sencillo como el foreach del
> principio
> del correo.
>
> > 2.4) Paso de argumentos a subrutinas
> > Pasando por valor, la subrutina se hace una copia interna del argumento,
> > así que no podemos devolverlo fuera de la sub (o si lo devolvemos no será
> > el modificado dentro de la sub)
>
> Si lo devuelves como valor de retorno de la subrutina, pues quien invoque
> la
> subrutina tendrá que guardarlo de alguna manera. Pero si dentro lo
> modificas,
> pues lógicamente la modificación se pierde si no sale afuera de alguna
> manera.
>
> > Pasando por referencia, la sub puede modificar dichos argumentos.
> > Pero, si quisiera pasar un array, aunque no quiera que lo modifique; ¿
> > Debería pasarlo referenciado, por que si no hará la ¿expansión?/flatten
> del
> > array ?
> > Es decir
> > $marine($a, \@b) #Bien?
> > &marine($a, @b) #Mal porque expande @b?
>
> En el primer caso la subrutina recibe dos parámetros, y están bien
> diferenciados (el segundo será una referencia seguro, el primero... bueno,
> podría serlo si $a lo es). En el segundo, la subrutina recibe tantos como
> elementos tenga @b más uno adicional, $a.
>
> No creo que sea importante como lo hagas, siempre que @b no tenga una
> barbaridad de datos, ya que al pasarlos por valor, se copian. Si lo haces
> de
> la segunda manera, es cierto que la subrutina lo ve todo "aplanado" o
> "aplastado" a un solo array @_.
>
> ¿Es eso problema? Si tú haces la subrutina y tú la usas, no. Para recuperar
> los valores dentro te basta con hacer:
>
> my $a = shift; # Extraigo un valor de @_, que es el $a de fuera
> my @b = @_; # Recupero el resto de valores de @_ de golpe.
>
> Si lo haces de la otra manera, como referencia, tendrás que hacer algo
> parecido:
>
> my ($a, $b) = @_;
>
> Pero ahora para usar $b, tendrás que desreferenciar cada vez, en plan @$b o
> $b->[0], que es feo de narices, y un tostón. :-)
>
> > use 5.010;
> > say "un abrazo!! " ;
>
> Argh, odio esto de Perl. :-)
>
> Tener que decir que uses una versión en concreto para poder usar un simple
> say()... Pero en caso de necesitarlo prefiero decir "use feature 'say';".
> Así
> queda claro que es lo que necesitas.
>
> --
> Alex (a.k.a. suy) | GPG ID 0x0B8B0BC2
> http://barnacity.net/ | http://disperso.net
>
>
> ------------------------------
>
> Message: 2
> Date: Fri, 12 Apr 2013 06:38:05 +0200
> From: Gonzalo Pérez de Olaguer Córdoba  <gpoc en iies.es>
> To: barcelona-pm en pm.org
> Subject: Re: [bcn-pm] Curso; dudas(regex, substr vs unpack,
>         subrutinas)
> Message-ID: <20130412063805.03ae1b16 en petres.salonet.snet>
> Content-Type: text/plain; charset="utf-8"
>
> Hola Sergio González Rodríguez <sergiogoro86 en gmail.com>
> el Thu, 11 Apr 2013 20:09:45 +0200 escribiste:
>
> > 2.1) substr vs unpack
> >
> > En el Perl cookbok (cap.1 accessing substrings:
> > http://docstore.mik.ua/orelly/perl/cookbook/ch01_02.htm ) dice que
> podemos
> > usar unpack para extraer substrings más rapidamente que con substr.
> >
> > Teniendo una $cadena = 'cadena de texto'
> > Podemos extraer el 'de' así:
> >     substr($cadena, 6, 3);
> >     o asi
> >     unpack("x7 A2", $cadena);
> >
> > He mirado el perldoc de unpack(
> > http://perldoc.perl.org/functions/unpack.html ), y otro tutorial(
> > http://www.perlmonks.org/?node_id=557655 )
> > y no me queda nada claro "de qué va el unpack..." simplemente que es más
> > rápido que el substr porque lo dice el cookbook...
> >
> > El debate sería: ¿Qué os parece usar el unpack como en este ejemplo
> frente
> > al substr? ¿Lo usáis? ¿Cuando y cuando no?
>
> substr trata la cadena como una lista de caracteres
> unpack trata la cadena como una lista de octetos
>
> Sólo son intercambiables si se utiliza un juego de caracteres que
> asigne un octeto a cada carácter. No serviría para utf8, por ejemplo.
>
> Yo no lo usaría nunca.
>
> > 2.2) Llamadas a subrutinas
> > marine();
> > o
> > &marine();
> >
> > ¿simple cuestión de estilo o tiene alguna otra implicación?
>
> marine() llama a marine con cero argumentos
>
> &marine llama a marine pasándole los argumentos de la función
> donde se ejecuta la llamada, de forma que marine verá los mismos
> argumentos que dicha función. No es equivalente a marine (@_),
> pues en este último caso marine recibe una copia de @_, mientras que
> &marine realmente recibe (y puede modificar) los mismos
> argumentos que tiene la función donde se llama.
>
> &marine() es una cosa rara que equivale a marine()
>
> > 2.3)Expresiones regulares
> > Leyendo de un archivo con líneas que contienen lo siguiente:
> > FBtr123;blablabla
> > Y
> > FBtr123,FBtr567,FBtr120;blabla
> >
> > Para almacenar estos match estoy haciendo:
> > push(@FBtr, $1) if ($line=~/(FBtr\d+);/ || $line=~/(FBtr\d+,.+);/ )
> > #guardar un match si sólo hay uno, y guardarlos todos si sólo
> > ¿Es esto lo mejor?
>
> Eso aceptaría, por ejemplo, "FBtr123,esto_no_me_lo_esperaba;blabla"
>
> > ¿o seria mejor así?
> > push(@FBtr, $1) if ($line=~/(FBtr\d+);||(FBtr\d+,.+);/ )
>
> push @FBtr, $1 if $line =~ m/^(FBtr\d+(,FBtr\d+)*);/;
>
> > *empecé a descubrir algo de los lookahead,  y pensé que podría
> > implementarlo para ver si hay 'un solo fbtr'  o 'más de uno' pero creo
> que
> > también eso sería liar el rizo innecesariamente ¿os parece?
>
> Un lookahead te pillaría FBtr123,FBtr123,FBtr123,... pero no una
> línea con FBtr que tuviesen distintos números.
>
> > 2.4) Paso de argumentos a subrutinas
> > Pasando por valor, la subrutina se hace una copia interna del argumento,
> > así que no podemos devolverlo fuera de la sub (o si lo devolvemos no será
> > el modificado dentro de la sub)
> > Pasando por referencia, la sub puede modificar dichos argumentos.
> > Pero, si quisiera pasar un array, aunque no quiera que lo modifique; ¿
> > Debería pasarlo referenciado, por que si no hará la ¿expansión?/flatten
> del
> > array ?
> > Es decir
> > $marine($a, \@b) #Bien?
> > &marine($a, @b) #Mal porque expande @b?
>
> Si la función llamada modifica localmente los argumentos querrás pasar
> el valor @b y no la referencia \@b, para que los cambios locales no afecten
> al array @b
>
> Si quieres que los cambios locales actúe sobre @b deberás pasar la
> referencia,
> a menos que hagas algo como esto: @b = marine ($a, @b);
>
> Si @b es grande pasar la referencia consumirá mucho menos tiempo
> y memoria que pasar por valor, pues en este último caso se está
> clonando el array.
>
> Saludos,
> Gonzalo.
>
> --
> Gonzalo Pérez de Olaguer Córdoba <gpoc en iies.es> --- www.gpoc.es
> PGP key 2861C704 --- F206 5671 6789 425D 111C  1302 214F 1934 2861 C704
> -------------- part següent --------------
> A non-text attachment was scrubbed...
> Name: signature.asc
> Type: application/pgp-signature
> Size: 190 bytes
> Desc: no disponible
> URL: <
> http://mail.pm.org/pipermail/barcelona-pm/attachments/20130412/9b2a8131/attachment-0001.bin
> >
>
> ------------------------------
>
> Subject: Peu de pàgina del resum
>
> _______________________________________________
> llista dels Barcelona-pm
> Barcelona-pm en pm.org
> http://mail.pm.org/mailman/listinfo/barcelona-pm
> BCN Perl Mongers: http://barcelona.pm.org
>
> ------------------------------
>
> Final de Resum de Barcelona-pm, vol 117, número 6
> **************************************************
>



-- 
Sergio González
Bioinformático && Biólogo marino
http://about.me/sergiogoro
------------ pr?a parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.pm.org/pipermail/barcelona-pm/attachments/20130415/16499bb5/attachment-0001.html>


Més informació sobre la llista de correu Barcelona-pm