diff options
-rw-r--r-- | examples/parray.tcl | 17 | ||||
-rw-r--r-- | tclcompat.tcl | 8 |
2 files changed, 22 insertions, 3 deletions
diff --git a/examples/parray.tcl b/examples/parray.tcl new file mode 100644 index 0000000..8ac5d3d --- /dev/null +++ b/examples/parray.tcl @@ -0,0 +1,17 @@ +# Example of using the 'putter' function to redirect parray output + +set a {1 one 2 two 3 three} + +# Use 'curry' to create a single command from two words +stderr puts "curry" +parray a * [curry stderr puts] + +# Same thing, but an alias instead +stderr puts "\nalias" +alias stderr_puts stderr puts +parray a * stderr_puts + +# Now use a lambda to accumulate the results in a buffer +stderr puts "\nlamba" +parray a * [lambda {msg} {lappend ::lines $msg}] +stderr puts [join $lines \n] diff --git a/tclcompat.tcl b/tclcompat.tcl index 5cf8e4c..6d8ccac 100644 --- a/tclcompat.tcl +++ b/tclcompat.tcl @@ -57,8 +57,10 @@ proc case {var args} { } } -# Optional argument is a glob pattern -proc parray {arrayname {pattern *}} { +# Second, option argument is a glob pattern +# Third, optional argument is a "putter" function +# +proc parray {arrayname {pattern *} {puts puts}} { upvar $arrayname a set max 0 @@ -70,7 +72,7 @@ proc parray {arrayname {pattern *}} { incr max [string length $arrayname] incr max 2 foreach name [lsort [array names a $pattern]] { - puts [format "%-${max}s = %s" $arrayname\($name\) $a($name)] + $puts [format "%-${max}s = %s" $arrayname\($name\) $a($name)] } } |