A block-local variable is declared after a semicolon in a block parameter list. Ruby gives it a new identity inside the block, even when an outer variable has the same name. section 6.3.8
Preserving an outer value
Given an outer `fahrenheit`, write `celsius.each do |c;fahrenheit|`. Assignments to `fahrenheit` now serve as temporary block values, leaving the original outer value unchanged after iteration. section 6.3.8
Distinguish the three block-variable forms:
- Existing local variables can be read and reassigned inside the block, so reassignment may remain visible afterward. section 6.3.8
- Block parameters are bound to values supplied when the block runs and remain local to the block. section 6.3.8
- True block-locals follow a semicolon, receive no argument, and protect temporary names from outer-scope collisions. section 6.3.8
