Let's see the following example. The fact is that local variables need to be initialized by substitution differently from other type of variables, because the first substitution works similarly to declaration. When an undefined local variable are referred, it is regarded as an invoking of method without any arguments. But you don't need to substitute arguments of a method in any definitions for methods, because their variables are considered as not yet being substituted. A local variable in an iterator block is effective only in the block if it is substituted in the block for the first time.
Procedure objects sharing their scope share also local variables.
A peculiar point to procedure objects is that sharing local scope is continued out of the scope.