Forgive me if this is an elementary question and I am missing something obvious, but there is a behavior in Ruby that puzzles me a lot.

I don't see why the two blocks below do not produce the same output.  One displays the numerically sorted array and the other does not.

# Block 1
myarray = ["210", "22"]
myarray = myarray.sort do |a,b|
    a.to_i <=> b.to_i
end
puts myarray 

# Block 2
myarray = ["210", "22"]
puts myarray.sort do |a,b|
    a.to_i <=> b.to_i
end

In one case, I reassign myarray to the return value of the sort method for myarray and then print myarray.  In the other case, I just directly print the return value of the sort method.  Shouldn't the return value be the same in both cases, and therefore the output also the same?

Here is the same thing in the irb interface:


irb(main):001:0> myarray = ["210", "22"]
=> ["210", "22"]
irb(main):002:0> myarray = myarray.sort do |a,b|
irb(main):003:1*     a.to_i <=> b.to_i
irb(main):004:1> end
=> ["22", "210"]
irb(main):005:0> puts myarray 
22
210
=> nil
irb(main):006:0> myarray = ["210", "22"]
=> ["210", "22"]
irb(main):007:0> puts myarray.sort do |a,b|
irb(main):008:1*     a.to_i <=> b.to_i
irb(main):009:1> end
210
22
=> nil