Ваш второй пример,
"$5 special".gsub(/^\$/, "\\$")
Должен это сделать.Причина, по которой вы видите две косые черты в выходных данных, связана с тем, что Ruby экранирует косую черту в строке для ее печати в виде литерала.Если вы распечатаете его в стандартном формате, вы увидите, что ожидаете:
irb(main):009:0> a = "$5 special".gsub(/^\$/, "\\$")
=> "\\$5 special"
irb(main):011:0> print a
\$5 special=> nil