| Deutsch English Français Italiano |
|
<103dom1$1tams$2@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Mark Summerfield <m.n.summerfield@gmail.com>
Newsgroups: comp.lang.tcl
Subject: Re: misunderstaning of switch command
Date: Tue, 24 Jun 2025 08:46:57 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 56
Message-ID: <103dom1$1tams$2@dont-email.me>
References: <103dnah$1tams$1@dont-email.me> <103do3k$1s2ei$3@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 24 Jun 2025 10:46:57 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="a2fd230b69efee73973f83cd7be3696e";
logging-data="2009820"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18iffW6NaPITld66qqx3HoW"
User-Agent: Pan/0.154 (Izium; 517acf4)
Cancel-Lock: sha1:31hAC8woFnu1ZvfMsBgItpCQvd0=
On Tue, 24 Jun 2025 10:37:08 +0200, Harald Oehlmann wrote:
> Am 24.06.2025 um 10:23 schrieb Mark Summerfield:
>> I have a switch command which is doing something I don't expect but I
>> don't understand what I've done wrong. In this example the default is
>> always executed but I expect the case before that to be executed.
>>
>> const UNCOMPRESSED U const ZLIB_COMPRESSED Z const SAME_AS_PREV =
>> set filename somefile.txt set action "added"
>> set kind Z switch $kind {
>> $::SAME_AS_PREV { puts "unchanged \"$filename\"" }
>> $::UNCOMPRESSED { puts "$action \"$filename\"" }
>> $::ZLIB_COMPRESSED { puts "$action \"$filename\" (zlib
>> compressed)" }
>> default { puts "!!!!!!!! UNEXPECTED !!!!!!!!" }
>> }
>>
>> What am I doing wrong?
>
> Nothing wrong. Tcl is just different, sorry for that.
>
> The "{" always avoids expansion of variables and commands. If you want
> to use variables in the switch, you have to avoid the "{".
>
> switch -exact -- $kind [list\
> $::SAME_AS_PREV { puts "unchanged \"$filename\"" }\
> $::UNCOMPRESSED { puts "$action \"$filename\"" }
> $::ZLIB_COMPRESSED { puts "$action \"$filename\" (zlib
> compressed)" }\
> default { puts "!!!!!!!! UNEXPECTED !!!!!!!!" }\
> ]
>
> Nevertheless, this is no fun on the quoting level (backslashes at the
> end etc). In addition, you have to take care, when the variable
> expansion happens. This might be tricky.
>
> I personally would write it like that:
>
> switch -exact -- $kind {
> = { # SAME_AS_PREV
> puts "unchanged \"$filename\""
> }
> U { # UNCOMPRESSED
> puts "$action \"$filename\""
> }
> Z { # ZLIB_COMPRESSED
> puts "$action \"$filename\" (zlib compressed)"
> }
> default { puts "!!!!!!!! UNEXPECTED !!!!!!!!" }
> }
>
> Harald
Thanks that works great.
Bit of a disinsentive to use consts though!