There's a bug in the built-in 'parray' procedure of Tcl 8.4.
<br />
The 'parray' procedure check if the variable is an array, and if it is not, then it tries to print it's content instead of it's name.


Code example:
<pre>
proc array_to_list {arr_VarName} {
                upvar $arr_VarName arr
                if [array exists arr] {
                                set tmp [array get arr]
                                parray arr
                                unset arr
                                parray arr
                                array set arr [array get tmp]
                                return 1
                }
                return 0
}

set b(a) "5"
set b(c) "asdas"
set b(dd) "al94i"

if [array_to_list b] {
                puts $b
} else {
                puts "BAAAAAAA"
}
</pre>

Output example:
<pre>
arr(a)  = 5
arr(c)  = asdas
arr(dd) = al94i

"arr" isn't an array
    while executing
"error isn't an array""
    (procedure "parray" line 4)
    invoked from within
"parray arr"
    invoked from within
"if [array exists arr] {
                                set tmp [array get arr]
                                parray arr
                                unset arr
                                parray arr
                                array set arr [array get tmp]
                                return 1
                }"
    (procedure "array_to_list" line 3)
    invoked from within
"array_to_list b"
    invoked from within
"if [array_to_list b] {
                puts $b
} else {
                puts "BAAAAAAA"
}"
    (file ".\test.tcl" line 22)
</pre>

The line "error isn't an array"" has the error, which is relevant to the second 'parray arr' line that is in the 'array_to_list' procedure.
<br />
ActiveState ActiveTcl <br Jun 05, 2013