From Ruby's official documentation:

> 
> **sort** → new\_ary sort { |a, b| block } → new\_ary Returns a new array
>  created by sorting self.
> 
> 
> Comparisons for the sort will be done using the <=> operator or using
>  an optional code block.
> 
> 
> The block must implement a comparison between a and b, and return -1,
>  when a follows b, 0 when a and b are equivalent, or +1 if b follows a.
> 
> 
> See also Enumerable#sort\_by.
> 
> 
> 

```
a = [ "d", "a", "e", "c", "b" ]
a.sort                    #=> ["a", "b", "c", "d", "e"]
a.sort { |x,y| y <=> x }  #=> ["e", "d", "c", "b", "a"]

```

---

> 
> **sort!** → ary click to toggle source sort! { |a, b| block } → ary Sorts
>  self in place.
> 
> 
> Comparisons for the sort will be done using the <=> operator or using
>  an optional code block.
> 
> 
> The block must implement a comparison between a and b, and return -1,
>  when a follows b, 0 when a and b are equivalent, or +1 if b follows a.
> 
> 
> See also Enumerable#sort\_by.
> 
> 
> 

```
a = [ "d", "a", "e", "c", "b" ]
a.sort!                    #=> ["a", "b", "c", "d", "e"]
a.sort! { |x,y| y <=> x }  #=> ["e", "d", "c", "b", "a"]

```

---

The result seems the same, so what's the difference?