finally tracked down an exception in eval_foreach that turned out to occur for
the first item in the list - missing underscore meant that I was addeding to
the local dictionary rather than the copy I had just made to pass to eval