aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/parray.tcl17
-rw-r--r--tclcompat.tcl8
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)]
}
}