Ключевым моментом здесь является то, что вы используете изменяющуюся версию gsub
, gsub!
, которая изменяет фактическую строку, к которой она вызывается. Что касается того, что он возвращает, документация говорит это лучше всего:
Выполняет замены String#gsub
на месте, возвращая str
или nil
, если замены не были выполнены.
Вы должны использовать версию без мутаций, gsub
, если вы на самом деле не хотите изменять строку, для которой она вызывается:
print v2.gsub(/\W/, "").reverse
Или вы можете выполнить подстановку перед печатью переменной:
v2.gsub!(/\W/, "")
print v2.reverse
Или, в Ruby 1.9 вы можете использовать tap
:
print v1.tap { |v1| v1.gsub!(/\W/, "") }.reverse