Lezioni pratiche sulla programmazione in Perl

Istruzioni foreach 
Concludiamo il discorso sugli array, introducendo una funzione molto potente, ma allo stesso tempo molto semplice da implementare nei nostri script, e cioè la funzione foreach, in pratica questa istruzione non fa altro che creare un blocco di istruzioni interne ad un programma, un po' come si fa per le funzioni if che vedremo in futuro. Per adesso accontentiamoci di vedere alcuni esempi:

@settimana =('lunedì','martedì','mercoledì','giovedì','venerdì','sabato');
$festa=domenica;
foreach $festa (@settimana)
{
     print "$festa\n giorno feriale\n"
}
print "$festa\n giorno di riposo";

Con questo semplice esempio è possibile processare ogni singolo elemento di @settimana applicando la funzione foreach alla variabile scalare $festa la quale si occuperà di processare i valori dell'array al solo interno del blocco foreach, rappresentato tra le parentesi graffe, e non anche all'esterno, dove la variabile $festa riprende il suo valore predefinito. Il risultato dovrebbe assomigliare a questo:

lunedì
 giorno feriale
martedì
 giorno feriale
mercoledì
 giorno feriale
giovedì
 giorno feriale
venerdì
 giorno feriale
sabato
 giorno feriale
domenica
 giorno di riposo

Vediamo ancora qualche altro esempio pratico:

#Esempio 1
@num=(2,3,4);
foreach $num(@num)
{
    $num **=2
    # eleva al quadrato ogni elemento dell'array
}
print "@num\n";
# @num varrà "4 9 16"

#Esempio 2
@num=(2,3,4);
foreach $num(@num)
{
    $num *=2
    # moltiplica per 2 ogni elemento dell'array
}
print "@num\n";
# @num varrà "4 6 8"

#Esempio 3
@num=(2,3,4);
foreach $num(@num)
{
    $num /=2
    # divide per 2 ogni elemento dell'array
}
print "@num\n";
# @num varrà "1 1,5 4"

#Esempio 4
@num=(2,3,4);
foreach $num(@num)
{
    $num +=2
    # addiziona 2 ad ogni elemento dell'array
}
print "@num\n";
# @num varrà "4 5 6"

#Esempio 5
@num=(2,3,4);
foreach $num(@num)
{
    $num -=2
    # sottrae 2 ad ogni elemento dell'array
}
print "@num\n";
# @num varrà "0 1 2"

#Esempio 6
@num=(2,3,4);
foreach $num(@num)
{
    $num %=2
    # individua il resto nella divisione per 2 di ogni elemento dell'array
}
print "@num\n";
# @num varrà "0 1 0"

#Esempio 7
@num=(2,3,4);
foreach $num(@num)
{
    $num **=-2
    # eleva alla potenza di  -2 ogni elemento dell'array
}
print "@num\n";
# @num varrà "0.25 0.111111111111111 0.0625"

#Esempio 8
@num=(2,3,4);
$num = 0;
foreach $numeri(@num)
{
     $num = $numeri + $num
}
print "$num\n";
# $num vale 9

Vista così questa istruzione non rappresenta un gran ché ma vedremo in futuro la sua utilità nel proseguire delle lezioni. Questa lezione chiude il nostro ciclo sulle array, provate ora con le informazione acquisite a risolvere i seguenti esercizi:

Trovate almeno tre modi distinti di calcolare la somma numerica degli elementi interni a @somma avente i seguenti valori: "33 trentini, 118, 916, perl5,00xx, ore 13.00, fine"

Scrivere un programma che chieda all'utente di inserire da tastiera tre valori per l'array @a e due valori per l'array @b, e poi calcoli la somma degli array, attacchi @a in testa a @b ed ordini i valori in modo ascendente.