2012-10-13 155 views
5

archivo: Prueba deRuby: línea de comandos sencilla con -pe no está funcionando

test 

entrada de línea de comandos:

ruby -pe 'gsub(/t([a-z])s/){"d"+$1.capitalize}' test 

estoy esperando salida sea dEt, pero la salida real es:

#<Enumerator:0x00000001c78520> 

No tengo idea de qué pasará. Funciona de IRB cuando lo haga:

"test".gsub(/t([a-z])s/){"d"+$1.capitalize} 
+1

que debería funcionar (Ver ['Kernel # gsub'] (http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-gsub)) pero Ruby está ignorando el bloque. Funciona con la forma no de bloque en 1.9.3 y en cualquier forma con 1.8.7. –

+0

Puede usar '$ _. Gsub! (...) {...}' para bloquear el daño cerebral 'ruby -pe' si es necesario. –

+0

@muistooshort ¿por qué el rubí ignora el bloque? ¿Es un error? – texasbruce

Respuesta

1

Esto resulta ser un error Ruby.

Envié un ticket de error hace 2 días, y ya lo resolvieron.

Aquí está el enlace a la entrada de errores (que es ahora un backport):

Backport #7157

Aquí es el nuevo registro de cambios al tronco:

Change log: see Oct 14

+0

fresca, que estaba adivinando que [ 'rb_funcall3' debería haber sido' rb_funcall_passing_block'] (http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ruby.c?r1=37177&r2=37176&pathrev = 37177) pero eso fue solo una suposición descabellada. Por cierto, puedes aceptar tus propias respuestas. –

+0

@muistooshort Sí, es exactamente como dijiste. Cambiaron '' rb_funcall3' a rb_funcall_passing_block'. Descargué el nuevo código y está funcionando perfectamente :) – texasbruce

Cuestiones relacionadas