> Pablo, yo venía probando, como OP, con los caracteres Unicode escapados, o
> sea que en vez de usar À directamente usaba \303\200... Debido a esto (todos
> mis ejemplos con $KCODE == "UTF8")
>
>> irb(main):061:0* a = "À"
>> => "À"
>> irb(main):062:0> b = "\303\200"
>> => "À"
>> irb(main):063:0> a == b
>> => true
>
> Ahora probé como lo ponés vos, que, según entiendo, debería ser equivalente
> (supondría que crearía la misma Regexp, de hecho). Y encuentro esto:
>
>> irb(main):064:0> c = /\303\200/
>> => /\303\200/
>> irb(main):065:0> d = /À/
>> => /À/
>> irb(main):066:0> c == d
>> => false
>
> Por lo tanto, la prueba que nos compete es:
>
>> irb(main):046:0* res = [ /\303\200/, /\303\200/u, /À/, /À/u ]
>> => [/\303\200/, /\303\200/u, /À/, /À/u]
>> irb(main):047:0> res.map &:hash
>> => [-279873035, -279873035, 429036, 429036]
>> irb(main):048:0> res.each { |re| re === "hola" }
>> => [/\303\200/, /\303\200/u, /À/, /À/u]
>> irb(main):049:0> res.map &:hash
>> => [-403010555, -403010555, 429036, 429036]
>
> De aquí saco que especificar /u (al menos con el $KCODE en utf) le da lo
> mismo (no lo conocía, por eso ante tu post tuve que investigar un poco).
> Pero lo más importante: crear las Regexps utilizando los caracteres
> especiales en lugar de su escaping no dispara este bug...
>
> Por otro lado, me parece que hay 2 bugs: (1) /À/ != /\303\200/ y (2) el bug
> que encontró Aureliano (que una Regexp cambia su estado interno -- y lo
> expone via hash -- sin avisar y por aparentemente nada). Estos dos podrían
> reportarse. Por otro lado ¿alguien tiene a mano un Ruby 1.9 y un JRuby para
> probar esto mismo
>
> Aureliano, me parece que (siendo un poco macho, cuidando de que el encodings
> de los archivos donde esto se guarda no se pierda y probando) preferiría
> declarar las regexps con los caracteres directamente en lugar de su escaping
> (para evitar el monkey patch).
>
> nachokb


De todas maneras, mas alla de estas situacion extraña de que  /À/ !=
/\303\200/  que surgio ahora, el problema se reduce a utilizar
caracteres dentro de la expresion q no estan contemplados por el
enconding vigente. No estoy del todo seguro si habria q considerarlo
un bug, igualmente no estaria mal investigarlo, ya q tiene pinta de q
esta asi hace tiempo.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a