Sujet : Re: confused about lists and strings...
De : m.n.summerfield (at) *nospam* gmail.com (Mark Summerfield)
Groupes : comp.lang.tclDate : 02. Jul 2025, 10:34:12
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <1042uek$3dr0l$2@dont-email.me>
References : 1 2
User-Agent : Pan/0.154 (Izium; 517acf4)
On Wed, 2 Jul 2025 11:27:54 +0200, Harald Oehlmann wrote:
Am 02.07.2025 um 10:39 schrieb Mark Summerfield:
proc process1 args {
set first [lindex $args 0]
puts "first='$first' args='$args' list? [string is list -strict $args]"
set rest [lrange $args 1 end]
puts "rest='$rest' list? [string is list -strict $rest]"
}
The name "args" is special in TCL returning all remaining arguments as a
list.
As you call:
process1 $argv
The one argument is put in a list. The result is a matrix (list in list).
How to solve:
a) don't use "args":
proc process1 myargs {
set first [lindex $myargs 0]
puts "first='$first' args='$myargs' list? [string is list -strict
$myargs]"
set rest [lrange $myargs 1 end]
puts "rest='$rest' list? [string is list -strict $rest]"
}
b) use the delist operator:
process {*}$argv
Hope this helps,
Harald
Thanks, I hadn't realised that using `args` would give me a list in a list.
I now just pass the list as-is (and called `rest` to avoid confusion!).