> This is one of those "I get it, but then I do not get it" paradoxes.

You said you know C++ and perl.  They both employ the concept of 
"references".

> I understand whatever is returned from the block is assigned to "hash",
> right?

No.  Inside the block, the code assigns an array reference to the key. 
Then the block returns a reference to the same array.    Two references 
to the same array.  Either one can be used to change the array.  Here is 
a simple example of that:

ref1 = {}
ref2 = ref1

ref1[:a] = 10
ref2[:b] = 20

p ref1

--output:--

{:a=>10, :b=>20}

-- 
Posted via http://www.ruby-forum.com/.