La réponse d'alias est à peu près juste dans le sens où il utilise correctement le foreach.
Le script que j'ai corrigé est presque bon, j'ai volontairement laissé l'erreur qui bloque le système, à savoir:
Pourquoi array names dans une simple liste ? La solution est juste de parcourir la liste:
Voici un mini-script de vérification du fonctionnement:
Et le résultat:
On voit bien que array names ne ramène rien.
Le script que j'ai corrigé est presque bon, j'ai volontairement laissé l'erreur qui bloque le système, à savoir:
tcl
foreach vhost [array names $::vhostjoinpart] {
Pourquoi array names dans une simple liste ? La solution est juste de parcourir la liste:
tcl
foreach vhost $::vhostjoinpart {
Voici un mini-script de vérification du fonctionnement:
tcl
set vhostjoinpart {
*@faucheur.enjoy-tchat.fr
}
proc test1 {host} {
foreach vhost $::vhostjoinpart {
if { [string match -nocase $vhost $host] } {
puts "Matched $host against $vhost"
} else {
puts "failed $host against $vhost"
}
}
}
proc test2 {host} {
foreach vhost [array names $::vhostjoinpart] {
if { [string match -nocase $vhost $host] } {
puts "Matched $host against $vhost"
} else {
puts "failed $host against $vhost"
}
}
}
puts "Test 1:"
test1 "user@blabla.com"
test1 "roger@faucheur.enjoy-tchat.fr"
test1 "berthe@Faucheur.Enjoy-Tchat.fr"
puts "Test 2:"
test2 "user@blabla.com"
test2 "roger@faucheur.enjoy-tchat.fr"
test2 "berthe@Faucheur.Enjoy-Tchat.fr"
Et le résultat:
Code :
crazycat@raspian:~ $ tclsh foreach.tcl
Test 1:
failed user@blabla.com against *@faucheur.enjoy-tchat.fr
Matched roger@faucheur.enjoy-tchat.fr against *@faucheur.enjoy-tchat.fr
Matched berthe@Faucheur.Enjoy-Tchat.fr against *@faucheur.enjoy-tchat.fr
Test 2:
crazycat@raspian:~ $