di Brent B. Welch L´autore: Brent Welch si diverte a costruire il sito web www.scriptics.com, che comprende un database (con note) di URL relative a Tcl (il Centro Risorse di Tcl, Tcl Resource Center) e l'infrastruttura per il commercio elettronico per il prodotto TclPro. Ha anche scritto diverse grosse applicazioni in Tcl/Tk, compreso il server web TclHttpd, usato su www.scriptics.com, l'interfaccia utente per la posta di Exmh e l'editor HTML webtk. E' l'autore di "Practical Programming in Tcl and Tk" (Programmazione pratica in Tcl/Tk). Welch ha conseguito la laurea in Ingegneria Aeronautica all'Università del Colorado, Boulder, nel 1982; un master in Informatica all'Università della California, Berkeley, nel 1986 e un PhD in Informatica sempre a Berkeley nel 1990. Precedentemente Welch è stato un membro dello staff di ricerca allo Xerox PARC, dove lavorava sui sistemi distribuiti, e successivamente un membro della squadra di Tcl/Tk presso i Sun Microsystems Laboratories. E' un membro di ACM e della IEEE Computer Society. Home Page: http://www.beedub.com/ Contenuto: |
Sommario:
Questo articolo spiega i concetti di base e la sintassi del linguaggio Tcl.
Per essere un linguaggio di scripting, Tcl ha una sintassi semplice.
cmd arg arg arg
$pippo
pippo
.
[clock seconds]
clock seconds
, che restituisce
l'ora attuale in secondi.
"some stuff"
{some stuff}
\
Ecco un comando Tcl che visualizza l'ora attuale. Usa tre comandi Tcl:
set
, clock
, e puts
. Il comando
set
assegna la variabile. Il comando clock
manipola i valori di tempo. Il comando puts
visualizza i valori.
set seconds [clock seconds] puts "L'ora attuale è [clock format $seconds]"
Si noti che non si usa il $ quando si assegna un valore ad una variabile; lo
si usa solo quando si vuole ottenere il valore della variabile.
La variabile seconds
non è necessaria nell'esempio precedente. E'
possibile visualizzare l'ora corrente con un solo comando:
puts "L'ora attuale è [clock format [clock seconds]]"
La sintassi di Tcl viene usata per guidare il parser di Tcl in tre passi: raggruppamento degli argomenti, sostituzione dei risultati e la distribuzione dei comandi.
puts
.
$pippo
con il valore della variabile pippo
, e
sostituisce ai comandi tra parentesi il risultato della loro esecuzione.
Il fatto che le sostituzioni vengano fatte dopo il raggruppamento è
fondamentale. Questa sequenza assicura che valori insoliti non complichino
la struttura dei comandi.
Ecco qui un altro esempio:
Qui le parentesi graffe sono usate per raggruppare gli argomenti senza fare alcuna sostituzione. Il parser di Tcl non sa niente di particolare sul comandoset i 0 while {$i < 10} { puts "$i squared = [expr $i*$i]" incr i }
while
. Lo tratta come qualsiasi altro comando.
E' l'implementazione del comando while
che sa che il primo argomento è un'espressione, e che il secondo argomento
è costituito da altri comandi Tcl.
Le parentesi raggruppano due argomenti: l'espressione booleana che controlla il ciclo
e i comandi nel corpo del ciclo.
Notiamo anche due espressioni matematiche: il confronto booleano e la moltiplicazione.
Il comando while calcola automaticamente il suo primo argomento come un'espressione.
Negli altri casi occorre usare esplicitamente il comando expr
per effettuare calcoli matematici.
Infine, Tcl invoca qualcos'altro per fare il grosso del lavoro. Abbiamo visto che Tcl
usa expr
per calcolare le funzioni matematiche, puts
per gestire
le funzioni di uscita, e set
per assegnare le variabili. Questi comandi Tcl
sono implementati da una procedura C che si è registrata in Tcl.
Le procedure di comando in C prendono gli argomenti stringa del comando Tcl
e restituiscono una nuova stringa come risultato. E' molto facile scrivere procedure di
comando in C. Esse possono fare di tutto, da accedere ai database a creare
interfacce utente grafiche. Tcl, il linguaggio, non sa affatto cosa fanno i comandi.
Si limita a raggruppare argomenti, a sostituire i risultati e a distribuire i comandi.
Ecco la procedura fattoriale:
proc fac {x} { if {$x < 0} { error "Invalid argument $x: must be a positive integer" } elseif {$x <= 1} { return 1 } else { return [expr $x * [fac [expr $x-1]]] } }
Sito web mantenuto dal Team degli Editori di LinuxFocus
© Brent B. Welch LinuxFocus 1999 |
1999-10-14, generated by lfparser version 0.7