2012-10-13 11 views
5

plik testowy wejście linioweRuby: prosta linia poleceń z -pe nie działa

test 

Command:

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

spodziewam się dEt wyjście, ale rzeczywista produkcja jest:

#<Enumerator:0x00000001c78520> 

Nie mam pojęcia, co się stanie. Działa to tak, kiedy robię:

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

To powinno działać (zobacz ['Kernel # gsub'] (http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-gsub)), ale Ruby ignoruje blok. Działa z niezablokowaną formą w wersji 1.9.3 iw każdej z wersją 1.8.7. –

+0

Możesz użyć '$ _. Gsub! (...) {...}', aby w razie potrzeby zniszczyć uszkodzenie mózgu 'ruby -pe'. –

+0

@muistooshort dlaczego ruby ​​ignorują blok? Czy to błąd? – texasbruce

Odpowiedz

1

To wygląda na błąd Ruby.

Złożyłem zgłoszenie błędu 2 dni temu, a oni już je rozwiązali.

Oto link do biletu błędów (to jest teraz backport):

Backport #7157

Oto nowy dziennik zmian do tułowia:

Change log: see Oct 14

+0

Fajnie, zgaduję, że ['rb_funcall3' powinien być' rb_funcall_passing_block'] (http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ruby.c?r1=37177&r2=37176&pathrev = 37177), ale to było tylko dzikie domysły. BTW, możesz zaakceptować własne odpowiedzi. –

+0

@muistooshort Tak, dokładnie tak, jak powiedziałeś. Zmienili 'rb_funcall3' na' rb_funcall_passing_block'. Pobrałem nowy kod i działa idealnie :) – texasbruce

Powiązane problemy