| Deutsch English Français Italiano |
|
<103do3k$1s2ei$3@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: Harald Oehlmann <wortkarg3@yahoo.com>
Newsgroups: comp.lang.tcl
Subject: Re: misunderstaning of switch command
Date: Tue, 24 Jun 2025 10:37:08 +0200
Organization: A noiseless patient Spider
Lines: 55
Message-ID: <103do3k$1s2ei$3@dont-email.me>
References: <103dnah$1tams$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Tue, 24 Jun 2025 10:37:08 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="c298b2c3f9e49450bb0b13b061c6e981";
logging-data="1968594"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19CyOf04NXU/4eH1SQXFzFq"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:htx9jjJrQaZVY8LJmsyEpltG7dc=
In-Reply-To: <103dnah$1tams$1@dont-email.me>
Content-Language: en-GB
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