Understanding puts vs. print vs. p in Ruby

Table of Contents

Ruby, a dynamic, object-oriented programming language, offers several methods for outputting information to the console. Among the commonly used ones are puts, print, and p. While they might seem similar at first glance, each serves a distinct purpose in Ruby programming. Let’s delve into each of these methods to understand their differences and when to use them.


The puts method is short for “put string” and is primarily used to output strings to the console with a newline character appended at the end. It’s commonly used for displaying messages, variable values, or any other string data. Here’s a simple example:

puts "Hello, world!"


Hello, world!

In addition to strings, puts can also accept arrays and hashes, automatically formatting them for easier reading:

puts [1, 2, 3]




The print method, as the name suggests, is used to print strings to the console without appending a newline character. It’s useful when you want to display multiple items on the same line or control the formatting of your output more precisely. Here’s how you can use print:

print "Hello, "
print "world!"


Hello, world!

Unlike puts, print does not automatically add a newline character, so subsequent print calls will continue printing on the same line.


The p method is primarily used for debugging purposes. It stands for “inspect” and provides a more detailed output of Ruby objects compared to puts or print. When you use p, Ruby will automatically call the inspect method on the object passed to it, providing a string representation of the object along with its class name. Here’s an example:

p [1, 2, 3]


[1, 2, 3]

Notice that p preserves the array formatting and provides additional information about the object being inspected.


Now, let’s compare the three methods side by side:

  • puts: Used for general output with a newline appended.
  • print: Used for output without a newline appended, suitable for displaying multiple items on the same line.
  • p: Used for debugging purposes, provides detailed output of Ruby objects.

When to use each

  • Use puts when you want to display a message or variable value and automatically append a newline character.
  • Use print when you want to display multiple items on the same line or control the formatting of your output more precisely.
  • Use p when you need detailed information about an object for debugging purposes, such as its class name and structure.

Additional Considerations


While puts and print are optimized for general output, p involves additional processing to generate detailed object representations. Therefore, excessive use of p in production code, especially within loops or in performance-critical sections, can impact performance.


Both puts and print provide minimal formatting options, such as newline control for print. If you require more complex formatting, such as padding or alignment, you may need to use string interpolation or formatting methods in conjunction with these output methods.


Although p is primarily used for debugging, its concise output format can be handy for quick inspection during development. However, for more extensive debugging sessions, consider using dedicated debugging tools like Pry or built-in tools like puts combined with conditional statements.

Best Practices

  1. Clarity: Choose the output method that best conveys your intention. Use puts for general messages, print for continuous output, and p for debugging and inspection.
  2. Efficiency: Minimize the use of p in performance-critical sections and favor puts or print for regular output tasks.
  3. Debugging: While p is convenient for quick inspections, consider using dedicated debugging tools or techniques for more complex debugging scenarios.
  4. Consistency: Maintain consistency in your codebase by using the appropriate output method consistently. This enhances readability and makes it easier for other developers to understand your code.

Each method serves a distinct purpose, offering varying levels of detail and formatting options. By understanding the differences between these methods and following best practices, you can effectively communicate with your users, control the formatting of your output, and debug your code efficiently.

Command PATH Security in Go

Command PATH Security in Go

In the realm of software development, security is paramount. Whether you’re building a small utility or a large-scale application, ensuring that your code is robust

Read More »
Undefined vs Null in JavaScript

Undefined vs Null in JavaScript

JavaScript, as a dynamically-typed language, provides two distinct primitive values to represent the absence of a meaningful value: undefined and null. Although they might seem

Read More »