puts
добавляет новую строку в конец каждого аргумента, если его еще нет.
print
не добавляет новую строку.
Например:
puts [[1,2,3], [4,5,nil]]
Возвращается:
1
2
3
4
5
Принимая во внимание, что print [[1,2,3], [4,5,nil]]
вернется:
[[1,2,3], [4,5,nil]]
Обратите внимание, что put не выводит значение nil, тогда как print выводит.