Look here
http://svn.ruby-lang.org/repos/ruby/tags/v1_9_1_0/NEWS

Since v 1.9.1 block arguments (in our case |num|)  are  always local, 
i.e in 'each' block |num| will not conflict
  with outer 'num' variable. In your machine you have 1.9.1 version.

On 08/03/2010 11:53 AM, Guglielmo Fachini wrote:
> Eugen Ciur wrote:
>    
>> |num| inside block iterates through array's items.
>> Last item in array is 5, thus |num| value will be the one from last
>> iteration of 'each' method.
>> It is better to rename |num| to something else,  |item| for example.
>> -----
>> Eugen
>>      
> I've tried it in my machine and the output is 1...
>
> C:\Users\Guglielmo>ruby -v
> ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
>
> C:\Users\Guglielmo>ruby
> array = [1,2,3,4,5]
> x = 1
> num = 1
> array.each { |num| puts num*20 + x }
> puts num
> ^D
> 21
> 41
> 61
> 81
> 101
> 1
>    

-----
Eugen