Отличия методов p и puts в Ruby
p foo соответствует puts foo.inspect, т.е. печатает внутреннее состояние (представление) объекта, используя inspect вместо to_s, который более подходит для отладки (вы сразу сможете видеть отличия, например, 1, "1" и "2\b1", которые не будут видны при использовании puts без inspect).