I am reading the documentation I found about ruby but several points
remain uclear to me.

In FAQ 2.2 the following code is used as example for:

a = 0
for i in 1..3 do
  a += i
  b = i*i
end
print a, b

is used as example for the following text:

"A block (``{'' ... ``}'' or do ... end) almost introduces a new scope ;-)
Locals created within a block are not accessible outside the block.
However, if a local within the block has the same name as an existing
local variable in the caller's scope, then no new local is created, and
you can subsequently access that variable outside the block."

Even if both a and b remain accessible after the block. So when does a
block create a new scope?

Which is the rationale of the fact that block variables are non-binding
if some variable with the same name already exists ? Isn't it confusing?
What is supposed to do the following fragment of code?

a = 1 ; x = 1 ; f = proc {|a| a += 1}
f.call(x)

Why the two following (admittedly contrived) computations give different
results ?

a = 1 ; x = 1 ; f = proc {|a| a += 1}
f.call(x)
f.call(a)
a # results in 2

a = 1 ; x = 1 ; f = proc {|a| a += 1}
f.call(a)
f.call(x)
a # results in 3

Are the following statement equivalent?

p() if (b1 and b2)
p() if (b1 && b2)

If so, why are operators `and', `or' needed? 

Sorry for the length of this mail and thanks in advance for any possible
answer.

					Davide Marchignoli