LINUX.ORG.RU

История изменений

Исправление router, (текущая версия) :

Прочитал перловый код. Если выкинуть защиту от дурака, останется не так уж и много

  1. проверка, что в строке с формулой нет ничего, кроме переменных, цифр и ограниченного набора операций
  2. выбор из строки всех переменных
  3. проверка, что все эти переменные уже есть или могут быть получены
  4. проверка на отсутствие рекурсии
  5. подстановка значений переменных через замену по regexp'ам ( тупо по всему списку переменных из п.2
    s/{$vars[i]}/\$value[i]/g
  6. вычисление строки через eval
  7. проверка, не вернул ли eval ошибку

С учётом советов, оберну eval в лямбду, которая на вход получает словарь Data с переменными, а возвращает [error,value]

И замена по регуляркам будет не заменять имя на значение, а менять {name} на Data['name']

Исходная версия router, :

Прочитал перловый код. Если выкинуть защиту от дурака, останется не так уж и много

  1. проверка, что в строке с формулой нет ничего, кроме переменных, цифр и ограниченного набора операций
  2. выбор из строки всех переменных
  3. проверка, что все эти переменные уже есть или могут быть получены
  4. проверка на отсутствие рекурсии
  5. подстановка значений переменных через замену по regexp'ам ( тупо по всему списку переменных из п.2 s/$vars/$value/
  6. вычисление строки через eval
  7. проверка, не вернул ли eval ошибку

С учётом советов, оберну eval в лямбду, которая на вход получает словарь Data с переменными, а возвращает [error,value]

И замена по регуляркам будет не заменять имя на значение, а менять {name} на Data['name']