[bcn-pm] Curso; dudas(regex, substr vs unpack, subrutinas)

Sergio González Rodríguez sergiogoro86 a gmail.com
dij abr 11 11:09:45 PDT 2013


¡Hola mongers!

Varias cosas:

1) Agradeceros la repetición del curso

foreach my $persona (@personasQueHicieronPosibleElCurso) {
    print "Gracias $persona ;)\n";
};

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?

2.2) Llamadas a subrutinas
marine();
o
&marine();

¿simple cuestión de estilo o tiene alguna otra implicación?

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?

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?

use 5.010;
say "un abrazo!! " ;

-- 
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/20130411/b12bfd87/attachment.html>


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