proc for-each-line {var lines body} { foreach item $lines { uplevel 1 [list set $var $item] uplevel 1 $body } } # Usage: accumulate lengths of each "line" set total 0 for-each-line line {hello world foo} { incr total [string length $line] } set total