Tutti questi blocchi possono ovviamente essere raggruppati:
if (condizione) {
cose;
da;
fare;
} elsif (condizione2) {
altre;
cose;
da;
fare;
} else {
altro;
ancora;
}
Questo esempio parla da solo: il perl testa la prima condizione, se questa è vera esegue il blocco. Se questa è falsa, passa a elsif ed esamina la seconda condizione: se è vera esegue il blocco. Se nessuna delle precedenti è vera, passa all'else.
Un ulteriore esempio:
print "Scegli un numeron";
$num=<StdIN>;
if ($num == '0') {
print "Hai premuto 0n";
} elsif ($num == '1') {
print "Hai premuto unon";
} elsif ($numero == '2') {
print "Hai premuto duen";
} elsif ($num == '3') {
print "Hai premuto tren";
} else {
print "Non hai premuto nè zero nè uno nè due nè tre!n";
}
Chiaro, no?? Abbiamo scelto di fare l'esempio così lungo per dimostrare che ci possono essere benissimo più di un elsif: qui ce ne sono ben tre, ed avrebbero potuto essere molti di più, senza un tetto massimo; invece vi può essere solamente un else ed un if, almeno che non siano concatenati:
if (condizione) {
if (condizione2) {
fai questo;
}
fai quest'altro;
}
L'esempio sopra funziona, ma è totalmente diverso dal precedente: questo si legge come " se succede una certa cosa (condizione) e se ne succede un'altra (condizione2) .....", non è una serie di alternative come l'esempio dei tre elsif.
Non è necessario introdurre un elsif() o un else(); la struttura può anche essere semplice come:
if (condizione) {
cose_da_fare;
}
oppure:
if (condizione) {
cose_da_fare;
} else {
altre_cose;
}
Le {} sono sempre necessarie in questi costrutti. Un modo per sintetizzare al massimo l'esempio:
if (condizione) {
cose_da_fare;
}
è
cose_da_fare if condizione;
Esempio:
if ($cmd eq 'ECHO') {
&print($args);
} elsif ($cmd eq 'CLEAR' || $cmd eq 'CL) {
print $cls if $ansi;
print "`#ssfe#ln" if $ssfe;
}
print "Non è unon" unless $number ==1;
#!/usr/local/bin/perl
print StdERR "nome del file: ";
$nome_del_file = <StdIN>;
open(FILE, "< $nome_del_file");
while (!eof(FILE)) {
$riga = <FILE>;
print "$riga";
}
Questo script non fa altro che chiedervi il nome del file da aprire, e, finchè non arriva alla fine (la condizione 'while(!eof(FILE)'), visualizza sullo schermo.
until Ripete un loop finchè una condizione è falsa.
La sintassi è:
until (condizione) { # si può sostituire con while per avere la
# condizione opposta
cose;
da;
fare;
}
Questo costrutto testa la condizione, e se è vera esegue tutto ciò che è contenuto in {}, poi esegue un nuovo test sulla condizione e così via finchè la condizione è falsa.
All'interno del blocco, ci possono essere altri 2 utili comandi:
$i = 0;
while ($i < 18) {
print "$i ";
$i++;
}
print "n";
$i = 0;
while ($i < 18) {
next if $i == 4;
print "$i ";
$i++;
}
print "n";
Anche qui si può utilizzare la sintassi.
fai_qualcosa while condizione
foreach $variabile (array o scalare) {
fai_qualcosa;
fai_qualcos'altro;
}
Come sempre, $variabile non è indispensabile, e, se questa non è specificata, verrà utilizzata $_ Gli argomenti tra () possono essere un array, più array o una lista di variabili, o chiamate di funzioni che restituiscono valori, o un misto di tutto questo.
Tutti questi scalari e array sono spediti in un array (come fa push() ), dopo di che viene eseguito il blocco tra {} per ogni valore.
Attenzione: se il codice tra {} modifica il valore di una variabile anche il valore nell'array verrà modificato.
Come con while/until, anche con foreach è possibile utilizzare last e next.
@bla = ("ick", 3, "arr", "bleargh");
%eek = (10, "no", 5, "yes", 7.5, "maybe");
foreach (@bla, keys(%eek), "heh") {
print "|", $_, "| ";
}
print "n"; # Visualizza
# "|ick| |3| |arr| |bleargh| |10| |5| |7.5| |heh|"
foreach (@bla, keys(%eek), "heh") {
$_ = "bla" if $_ == 3;
}
print join(":", @bla)."n"; # Visualizza "ick:3:arr:bleargh"
foreach $i (@bla) {
$i = "bleh" if $i == 3;
}
print join(":", @bla)."n"; # Visualizza "ick:bleh:arr:bleargh"
for (statement1; condizione, statement2) {
cose;
da;
fare;
}
for ($i = 0; $i < 18; $i++) {
print "$i ";
}
print "n";
for ($i = 0; $i < 18; $i++) {
next if $i == 4;
print "$i ";
}
print "n";
Windows 8 Store, un posto in prima filaLa pre-certificazione che permetterà di avere le nostre applicazioni... |
La concorrenza con C++11, async e la libreria ThreadingLa libreria Threading e i principali costrutti per sfruttare il... |
Visual Studio 11 beta, le novitàLe caratteristiche più interessanti introdotte nella beta di Visual... |
Windows 8, WinRT API e applicazioni Metro StyleCome creare una semplicissima interazione in stile Metro con C++... |
C++11, la libreria standardLe funzioni sugli insiemi e i contenitori mutuati dalle estensioni... |
Azure, una nuvola tanti linguaggiEntrare con semplicità ed efficacia nel mondo di Windows Azure e... |
Guida AntipatternCome evitare le cattive abitudini, le worst practices e le trappole... |
RESTful Web Services - La GuidaDai principi ispiratori del Web programmabile e delle architetture... |
Ogni settimana, direttamente nella tua e-mail: articoli, script e guide su Java, Visual Basic, VB.Net ed i più diffusi linguaggi di programmazione.
Iscriviti alla newsletter
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |