> Maybe I'm wrong (as is not that un-common) and I'm not seeing something.
> But I can't figure out anything in favor of having |x,y,z| be potentially
> non-local but for efficiency.

Well, the most common way I use something like this is as a way to tell
if I broke out of a loop and where, such as

i, obj = nil, nil
data_objects.each_with_index {|obj, i|
  if not obj.valid?
    break
  else
    obj.do_something
  end
}

if not obj.valid?
  print "The object at index ", i, " was invalid.  Aborted."
end

And, yes, I could do this by doing something like

last_i, last_obj = nil, nil
data_objects.each_with_index {|obj, i|
  last_i, last_obj = i, obj
  if ...
}

but, well, you could just rename variables something that doesn't
conflict, rather than me having to rename variables so they're not
shadowed.  It's convenient.

--Johann