ioProgrammo N°4, Maggio 1997 ©Copyright DIEMME Editori
if (espressione) { istruzione/i; } else { istruzione/i; }La clausola else è facoltativa, mentre le parentesi graffe sono obbligatorie, anche se si tratta di una singola istruzione. L'espressione condizionale è una qualsiasi espressione Perl che produce un risultato booleano (vero o falso, con falso=0 e vero qualsiasi valore diverso da zero). Se il risultato è quindi vero sarà eseguito l'argomento di if, altrimenti sarà eseguita l'istruzione dopo l'else. Gli if possono essere annidati e associati a clausole elseif dando origine a scale if-else-if. L'istruzione unless, invece, è l'esatto contrario di if.
unless (espressione) { istruzione/i; } else { ... }In questo caso il blocco di istruzioni verrà eseguito solo se l'espressione risulta falsa
$i = 20; unless ($i < 10) { print "i è maggiore di 10\n"; }Passiamo ora alle istruzioni di iterazione. Il ciclo for ha una sintassi analoga al for del linguaggio C
for (inizializzazione; espressione; incremento) { istruzione/i; }e viene usato per ripetere un determinato numero di volte una o più istruzioni. L'iterazione continua finché l'espressione condizionale rimane vera. Ecco come si può usare il for per sommare uno dopo l'altro i numeri da 1 a 10
for ($i=1; $i<=10; $i++) { $somma += $i; } print "Somma = $somma";Simile al for è l'istruzione foreach, più indicata se si usano array
foreach variabile (array) { istruzione/i; }e che dopo aver assegnato a variabile un elemento di array esegue il blocco di istruzioni. L'iterazione continua finché non rimane alcun elemento dell'array. Vediamo l'esempio precedente adottando foreach
@numeri = (1..10); foreach $i (@numeri) { $somma += $i; } print "Somma = $somma";C'è anche l'istruzione while
while (espressione) { istruzione/i; }usata per ripetere una o più istruzioni finché la condizione è vera. Ecco un esempio per leggere dallo standard input e stampare le righe lette
while (<STDIN>) { print $_; }La versatilità del ciclo while è notevole e si può usare praticamente qualsiasi espressione condizionale, anche un intero array. Sì, perché le istruzioni verranno iterate fino all'ultimo elemento dell'array. Esempio:
@array = ('a'..'z'); while (@array) { $a = shift @array; print $a; }C'è un misterioso shift. E' una delle tante funzioni predefinite per il trattamento degli array. La funzione shift elimina il primo elemento dall'array e lo restituisce, spostando tutti gli altri elementi rimanenti. Anche while come if ha il suo opposto: l'istruzione until. Le istruzioni di salto come last e next vengono usate per forzare rispettivamente la fine e l'iterazione di un ciclo. Questo script stampa i numeri pari tra 0 e 100 ma quando si arriva a 50 finisce.
for ($x=0; $x<=100; $x++) { if ($x % 2) { next; } if ($x > 50) { last; } print "$x\n"; }goto invece sposta il flusso del programma ad una etichetta. Eseguite il seguente script e scrivete exit per fermarlo.
loop: #etichetta print "Comando: "; $stop = <STDIN>; chop $stop; #elimina il newline da $stop unless ($stop eq "exit") { print "scrivere exit per uscire\n"; goto loop; }
do { print "nome: "; $nome = <STDIN>; chop $nome; } while ($nome !~ /^[a-z']*$/i);Il carattere i alla fine dell'espressione forza la ricerca senza distinguere minuscole e maiuscole. Oltre alle funzioni di ricerca si possono costruire delle funzioni di sostituzione. $var =~ s/perl/PERL/gi cerca la striga perl in $var e, se la trova, la sostituisce con PERL.
Data creazione HTML: Febbraio 1998
Autore: Francesco Munaretto
E-mail: NoSpam@thank.you