MGS [2003/09/05] - A quick proc that works like parray, but returns the value instead of printing to stdout.

 proc arrayval {array {pattern *}} {
   upvar $array a
   if { ![array exists a] } { error "\"$array\" isn't an array" }
   set lines [list]
   set max 0
   foreach name [array names a $pattern] {
     set len [string length $name]
     if { $len > $max } { set max $len }
   set max [expr {$max + [string length $array] + 2}]
   foreach name [array names a $pattern] {
     set line [format %s(%s) $array $name]
     lappend lines [format "%-*s = %s" $max $line $a($name)]
   return [join [lsort $lines] \n]

 # example code
 text .t
 pack .t -expand 1 -fill both
 .t insert end [arrayval ::env]

See also: