This has nothing to do with OOP. The “basic method” for outputting
something is IO#print. You can stick with this, if you want.
To make things easier to use in many convenient cases, Ruby also has
IO#puts, Kernel#print, Kernel#p, Kernel#pp, and several others. You can
use them, if they fit you. You can create new ones, if you are not
satisfied with them. For instance, if you have the habit to add to most
of your classes a method named :myFancyPrinting, you could add a method
of this name to, say, Kernel, and define it to invoke :myFancyPrinting
on the argument (if it is defined) and revert to, say, Kernel#puts if it
In your case, you are picking from the list two arbitrary methods -
Kernel#print and Kernel#puts - and wonder, why they behave differently.
Well, why should they behave the same? They serve a slightly different