Я понимаю, что это не полностью одобренный способ, но
IO.readlines(filename).join('') # join with an empty string because readlines includes its own newlines
Загрузит файл в строку, которую затем можно будет вывести в newperms, как если бы это была строка.Есть большая вероятность, что причина, по которой это не работает в настоящее время, заключается в том, что вы пытаетесь записать обработчик ввода-вывода в файл, а обработчик ввода-вывода не преобразуется в строку так, как вы этого хотите.
Тем не менее, другое исправление может быть
newperms << mainperms.read
Кроме того, убедитесь, что вы закрываете основные области перед выходом из сценария, поскольку это может привести к поломке.
Надеюсь, это поможет.