[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Duda de Perl->regexp



> > Primero que nada, tu duda: Puedes poner una variable dentro de una
> > expresión regular sin sintaxis especial alguna
>
> Eso me lo vas a tener que demostrar porque yo ya no me lo creo ;-)
> He perdido la fé completamente!!!

Es común ese sentimiento al comenzar a meterse a lo esotérico y bonito de
Perl ;-) No desesperes...

> > $line =~ /^$id\|.*?\|.*?\|.*?\|.*?\|.*?\|(.*?.)\|.*/;
>
> Ack.
>
> >    $line =~ /^$id\|.*\|.*\|.*\|.*\|.*\|(.+)\|.*/;
>
> Ack. Lo pruebo y te cuento.
>
> >    $line =~ /^$id\|(?:.*\|){5}(.+)\|.*/;
>
> ¿Se supone que esto es más legible? No sé qué decir :-)

jejeje :) Bueno, más legible en el sentido en que puedes identificar más
fácilmente una repetición - Más legible a ojos entrenados ;-)

> >    $line =~ /^$id\|(?:.*\|){5}(.+)\|/;
>
> Ok, perfecto. Lo que venga después lo desecho, por tanto así queda más
> cortito.
>
> > - Legibilidad, importante, muy importante.
>
> Entre tú y yo, no te me ofendas. ¿Legibilidad? Esto es Perl. Y
> expresiones regulares! XDDD
> Después de ver en los tutoriales cosas com $_, $., $+... Perl no
> coincide con mi concepto de legible :-))))

Pythonera ;-)

El que tenga chiringolitos no lo hace menos legible... Sí, requiere algo
más de conocimiento para entenderle, pero lo hace simplemente más
expresivo, más flexible. Se ve más sucio, pero si lo ves de cerquita, es
más bonito :)

> >  Por lo que dices, tú no eres experta en expresiones regulares, y no
> >  sabes quién va a darle mantenimiento en un futuro
>
> Lamentablemente lo sé: yo.  Y te aseguro que con el orgullo que tengo lo
> voy a dejar bonito. Porque ahor lo estoy migrando de bash a Perl, y me
> funciona, pero muy pobre en rendimiento. Y como se me meta a mí entre
> ceja y ceja aprender a hacer esto, que no puede ser tan difícil, digo
> yo, que no es Inteligencia Artificial... ;-)

¿Evaluar expresiones regulares te sale menos eficiente que en shell? No,
creo que estás haciendo algo mal ;-) Una de las principales mejorías al
alejarte del shell hacia un lenguaje compilado, como Perl, es la velocidad
de ejecución :)

> > - Usa el modificador /x, y comenta tu expresión. Este modificador te
> > permite meter espacio en blanco y comentarios sin que afecten a la
> > expresión:
> >
> >    $line =~ /^$id\|       # Que inicie con el identificador
> >               (?:.*\|){5} # Cinco campos que no me importan
> >               (.+)\|      # De acá estoy tomando $encontrado
> >             /x;
>
> Eso sí me parece más legible, ahora empezamos a hablar el mismo idioma
> :-)

De hecho, así se ven (entiendo) las expresiones regunares en Python por
default. Y en Perl 6 también. Nota lateral, para tí que eres lingista:
Perl 6 te va a encantar: Del mismo modo que unes métodos y atributos en
una clase cuando programas orientado a objetos, en Perl 6 podrás juntar
juegos de reglas de expresiones regulares en gramáticas flexibles y
retepoderosotas! :)

> > Es ligeramente más rápido y más claro usar $1 (explicitar que es el
> > primer caso encontrado exitosamente) a usar $+ (el siguiente - en este
> > caso, el primero).
>
> Perfecto. Putos tuttoriales... :-)

El problema de muchos tutoriales es que te enseñan en estilo Perl 4, que
era bastante menos claro y más estorboso...

> (...)
> Y luego lo meto en una hoja de cáculo Gnumeric, con otro script que me
> hizo mi querido amigo Héctor, que me metió el vicio de Perl en la sangre
> :-)

Mi más profundo respeto por Héctor!

> > ...Además, se nota que vienes de C ;-)
>
> Cómo lo sabes? C fue mi primer lenguaje, pero nunca hice nada serio ni
> medianamente difícil. Me sirvió para aprender un poquito de metodología.
> Luego PHP, que se traga perfectamente el estilo de C. Luego tuve una
> crisis y volví a Bash. Y después de coquetear con Python, ganador de mi
> corazón, he querido espiar al "enemigo". Perl me recuerda al PHP pero en
> ilegible, es write only :-)

La deformación que te lleva a usar ciertas estructuras como si estuvieras
hablando en C :)

Perl te permite escribir de maneras mucho más naturales, por ejemplo la
que te mencionaba, en vez de if (condición) {acción} a muchos nos es más
claro, para acciones simples, decir acción if condición. Y va lo mismo
para los while, para los for/foreach, todo el asunto de los until y
unless, el operador ternario (cond ? verdadero : falso) tan poco utilizado
en C y tan querido en Perl...

> De todas formas, soy un desastre programando. Soy de letras. No hay
> pensamiento lógico en mi pobre neurona.

...Acércate a un lenguaje diseñado por linguistas! :)

Saludos prosélitas,

-- 
Gunnar Wolf - gwolf@campus.iztacala.unam.mx - (+52-55)5623-1118
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF





Reply to: