Il PERL

Cos'è il PERL?

Un noto linguaggio di scripting, acronimo di Practical Extration Report Language. Se non è già installato, il programma è PERL.EXE. Per ottenerlo basta cercare con Google "scaricare activeperl" e troverete il programma desiderato.

Il PERL

Facendo doppio clic sul file verranno eseguite le istruzioni che si trovano all'interno.

Noteremo che appena finito di eseguire tutte le istruzioni chiude la finestra della linea di comando. Solo più avanti scopriremo come fare: nel frattempo, possiamo ovviare il problema eseguendo il file direttamente dalla linea di comando.

 

Il comando print

Scrive il testo specificato. Esempio:

print "Il bimbo dice \"Ciao\"\n";

Le virgolette interne sono precedute da uno slash perchè altrimenti vengono interpretate come deliminatori. Questa tecnica si chiama "escaping". La stessa cosa si deve fare nel caso siano utilizzate le virgolette singole.

\n serve per andare a capo.

Il punto (.) unisce due stringhe, in seguito vedremo che unisce anche due variabili, una stringa e una variabile o viceversa:

print "Ciao "."bello\n";

La X ripete il numero di volte specificato il testo:

print "Ciao\n"x(5);

 

Il comando sleep

Blocca lo script per il numero di secondi specificato, se non è specificato il numero blocca lo script per un tempo indeterminato:

sleep n;

Esempio:

print "Ciao Rega\n";
sleep;

Blocca lo script per far visualizzare il messaggio.

NB: Blocca lo script prima di eseguire i comandi della riga in cui è situato, quindi se non è specificato \n blocca lo script prima di eseguire il comando print.

 

Inserire commento

Per inserire un commento scrivere:

# commento

Esempio:

# Questo è un file PERL
print "Ciao\n";
# Visualizza "Ciao" e va a capo
sleep;
# Blocca lo script

 

Definire variabili

Per definire una variabile basta scrivere:

$variabile = valore;

Esempio:

$a = "Ciao";
print $a."\n";
sleep;

NB: Non è necessario andare a capo dopo ogni istruzione, ma è sempre necessario mettere il punto e virgola (;):

$a = "Ciao"; print $a."\n"; sleep;

 

Definire array

Un array è un insieme ordinato di elementi. Per definire un array scrivete:

@array = ("valore1", "valore2", "valore3");

Per estrarre un valore di un array scrivete:

$array[n]

n specifica quale valore usare, se viene specificato 0 viene estratto il primo, se viene specificato 1 il secondo e così via.

Per inserire un nuovo valore ad un array già definito scrivete:

push(@array, ("valore4", "valore5"));

Per eliminare l'ultimo valore dell'array usate pop, che è il contrario di push:

pop(@array);

Per aggiungere un valore all'inizio di un array si usa unshift:

unshift(@array, ("valore 0"));

Per eliminare il primo valore di un array si usa shift, il contrario di unshift:

shift(@array);

I nuovi valori verranno aggiunti dopo i valori precedentemente definiti.

Esempio:

@denti = ("incisivi", "canini", "premolari", "molari");
print $denti[0]."\n"; # Scrive "incisivi"
print $denti[2]."\n"; # Scrive "premolari"
push(@denti, ("del giudizio"));
print $denti[4]."\n"; # Scrive "del giudizio"
sleep;

 

Definire un array associativo

Questo tipo di array associa ad una parola un numero, in questo modo:

%array_assoc = (
    "stringa1", 1,
    "stringa2", 2
);

Per espandere il valore a una stringa, scrivete:

$array_assoc{"stringa1"}

Esempio:

%num = (
  "zero", 0,
  "uno", 1,
  "due", 2,
  "tre", 3,
  "quattro", 4,
  "cinque", 5,
  "sei", 6,
  "sette", 7,
  "otto", 8,
  "nove", 9
);
print $num{"uno"}.$num{"otto"}."\n"; # Scrive "18"
sleep;

 

Operatori

Gli operatori più comuni sono:

  • + - Più.
  • - - Meno.
  • / - Diviso.
  • * - Per.
  • ** - Potenza.
  • % - Divisione (espande solo il resto fra il dividendo e il divisore).
  • ++$var - Pre-incremento di 1 della variabile.
  • $var++ - Post-incremento di 1 della variabile.
  • --$var - Pre-decremento di 1 della variabile.
  • $var-- - Post-decremento di 1 della variabile.
  • $var += $var2 - Incremento di $var2 della variabile.
  • $var -= $var2 - Decremento di $var2 della variabile.

Esempio:

print "3 alla seconda = ".(3 ** 2)."\n\n";
print "3 per 2 = ".(3 * 2)."\n\n";
$a = 3;
print "3 meno 1 = ".(--$a)."\n";
sleep;

 

Costrutto if, elsif ed else

$a = 5;
$b = 7;
if ($a * $b == 35 && $a < $b) {
    $c = $a * $b;
    print $c."\n";
} elsif ($a == 2 || $a != $b) {
    print $b."\n";
} elsif (!($a == $b)) {
    print $a."\n";
} else {
    print "Ciao!\n";
}
sleep;
  • IF serve per eseguire una o più istruzioni nel caso in cui la condizione specificata siano soddisfatta.
  • ELSIF, nel caso le codizioni precedenti non siano soddisfatte esegue una o più istruzioni nel caso in cui la condizione o le condizioni di ELSIF siano soddisfatte.
  • Infine, ELSE esegue un comando nel caso in cui tutte le condizioni precedenti non siano soddisfatte.

Ora facciamo ulteriori osservazioni sugli operatori logici:

  • && unisce due condizioni, entrambe le condizioni devono essere soddisfatte (AND logico).
  • || unisce sempre due condizioni, ma basta che una delle due condizioni sia soddisfatta (OR logico).
  • ! inverte il logico di una condizione (NOT logico).

Per non fare confusione con l'ordine delle operazioni, suggerisco di chiudere in una parentesi solo due operandi di un'operazione logica:

$a = 5;
$b = 3;
$c = 1;
if (($a > $b || ($a == 4 || $c == 100)) && (!($c > $a))) {
    print "Bingo!\n";
}
sleep;

Ci sono poi gli operatori di confronto (che hanno sempre la precedenza sugli operatori logici), i quali restituisono un valore logico in base al confronto tra due variabili:

  • == - Uguale a;
  • != - Diverso da;
  • < - Minore di;
  • <= - Minore o uguale a;
  • > - Maggiore di;
  • >= - Maggiore o uguale a.

Ma ad esempio che significa:

if ($a) {
    print "Il valore di a è ".$a."\n";
} else {
    print "La variabile a non esiste\n";
}
sleep;

Senza alcun confronto (cioè solo con il nome di una variabile) esegue il comando nel caso la variabile sia definita con un valore positivo diverso da 0.

Fino ad adesso abbiamo fatto solo confronti numerici, ma si possono fare confronti fra delle stringhe, per esempio:

$a = "Ciao";
$b = "ciccione!";
if ($a ne $b) {
    print $a." ".$b."\n";
}
sleep;

Gli operatori da usare in questi casi sono:

  • eq - Uguale a;
  • ne - Diverso da;
  • lt - Minore di;
  • le - Minore o uguale a;
  • gt - Maggiore di;
  • ge - Maggiore o uguale a.

Senza alcun confronto esegue il comando nel caso la variabile sia definita con una stringa contenente almeno un carattere.

 

Come far inserire un dato dall'utente

E' molto semplice, basta fare così:

$variabile = <stdin>;

Verrà fermato lo script per far inserire all'utente (cioè l'input standard) una stringa che verrà assegnata alla variabile specificata.

Esempio:

print "Come ti chiami? ";
$a = <stdin>;
print "\nCiao ".$a."!\n\nPremi Invio per uscire . . . ";
$b = <stdin>;

 

Il comando while

Ripete le istruzioni specificate se la condizione è vera.

while (<condizione>) {
    <istruzioni>
}

Esempio:

$str = "Quanto fa 2 + 2? ";
print $str;
$a = <stdin>;
while ($a != 4) {
    print "\nSbagliato. Riprova.\n\n";
    print $str;
    $a = <stdin>;
}
print "\nEsatto!\n\nPremi Invio per uscire . . . ";
$b = <stdin>;

 

Il comando for

Ripete i comandi specificati se la condizione finale è vera. Capiamo meglio con un esempio.

for (<condizione iniziale>; <condizione finale>; <incremento>) {
    <istruzioni>
}

La condizione iniziale è un assegnazione. La condizione finale è una condizione per cui se diventa falsa termina il ciclo. L'incremento è solitamente una modifica alla condizione iniziale che permette di arrivare alla condizione finale dopo un certo numero di passi.

Dopo aver eseguito le istruzioni, se la condizione finale è soddisfatta, le ripete, al contrario se la condizione finale non sia soddisfatta esce dal ciclo.

Esempio:

for ($a = 0; $a <= 10; $a++) {
    print "La variabile a equivale a ".$a."\n\n";
}
print "Ciclo finito. Premi Invio per continuare . . . ";
$b = <stdin>;

Commentate qui sotto se non avete capito qualcosa, se volete che venga aggiungiunto qualcosa a quanto ho scritto o altro...

Commenti

Supportando i contenuti che secondo te sono rilevanti, anche solo lasciando un commento, contribuirai a dare a questi contenuti maggiore visibilità e a rendere internet un posto più gradevole, affinché le stesse informazioni che hai trovato utili possano essere accessibili anche ad altre persone. Grazie per l'attenzione.