Я пытаюсь интерполировать переменные окружения в строку в Ruby и мне не везет. Одно из моих требований - сделать что-то (зарегистрировать ошибку, запросить ввод и т. Д.), Если в начальной строке найден заполнитель, у которого нет соответствующей переменной среды. Похоже, что блочная форма String # scan - это то, что мне нужно. Ниже приведен сеанс irb моей неудачной попытки.
irb(main):014:0> raw_string = "need to replace %%FOO%% and %%BAR%% in here"
=> "need to replace %%FOO%% and %%BAR%% in here"
irb(main):015:0> cooked_string << raw_string
=> "need to replace %%FOO%% and %%BAR%% in here"
irb(main):016:0> raw_string.scan(/%%(.*?)%%/) do |var|
irb(main):017:1* cooked_string.sub!("%%#{var}%%", ENV[var])
irb(main):018:1> done
irb(main):019:1> end
TypeError: cannot convert Array into String
from (irb):17:in `[]'
from (irb):17
from (irb):16:in `scan'
from (irb):16
from :0
Если я использую ENV["FOO"]
для ручной интерполяции одного из них, он работает нормально. Я бьюсь головой о стол. Что я делаю не так?
Ruby - это 1.8.1 на RHEL или 1.8.7 на Cygwin.