Questo tutorial permette di ripassare passo passo i fondamenti di Perl. Suggeriamo a chi si sente meno sicuro di fare questo tutorial in classe, mentre per gli altri può essere utile farlo a casa come ripassino.
Per questa esercitazione create una directory chiamata lab6, in cui salvare gli script proposti. Prestate attenzione
Script analfabeti
Somme
Creare uno script chiamato somma.pl in cui creare un array con almeno 8 elementi numerici interi (positivi e/o negativi). Con un ciclo “for” per sommare tutti gli elementi, e poi stampare la somma in una riga.
Creare poi uno script analogo, chiamato somma2.pl, che esegua la stessa operazione ma usando un ciclo foreach.
Array
Crea uno script chiamato subarray.pl in cui metterai l’array dell’esercizio precedente (ovvero l’istruzione che lo crea). Nella riga successiva crea due variabili ($primo, e $secondo) che contengano i primi due elementi dell’array. Soluzione
Hash
Creare uno script chiamato siamo_noi.pl in cui creare un hash che contenga almeno 4 elementi, del tipo “geno-1” -> “Nome Cognome”. In pratica metterai la tua login associata al tuo nome, e quella di 3 tuoi vicini di computer.
Con un ciclo foreach stampare uno per riga tutti gli elementi, nel formato “Chiave [tab] Valore”. Ricorda che per fare un tab si usa \t.
Substr
La funzione substr prende come input una stringa e dei parametri che definiscano la porzione che ci interessa, e ci restituisce la sotto stringa. Crea uno script chiamato substr.pl in cui incollare queste righe.
Crea una variabile $this che contenga la porzione della stringa iniziale uguale a ‘questo’ (usando ovviamente substr).
Crea una variabile $ultimi3 che contenga gli ultimi tre caratteri della stringa (prova a usare le coordinate negative!!!).
ARGV questo sconosciuto
Crea uno script chiamato param1.pl che stampa il primo argomento inviato dall’utente.
Crea uno script chiamato param2.pl che infila nella variabile $primo il primo parametro passato dall’utente, e alla variabile $secondo il secondo parametro e poi le stampa.
Crea uno script chiamato param_elenco.pl che stampa, uno per riga, tutti gli argomenti passati dall’utente, e alla fine stampa una riga con il totale degli argomenti passati.
Split
Split è la funzione che prende una stringa e la rompe in pezzi ogni volta che trova un “pattern” separatore. Dato che il suo risultato è un numero potenzialmente maggiore di uno di stringhe, verrà restituito in un array. Ad esempio:
$stringa = "Andrea, Carlo, Giovanni, Toni"; @persone = split(",", $stringa);
Crea uno script chiamato split.pl che partendo dalle due righe di esempio fornite qui, stampi tutti gli elementi dell’array @persone, uno per riga.
Cosa succede se creo un array @prova = split(“a”, $stringa)?
Leggere un file: head
Crea uno script head.pl che legge un file, passato dall’utente, e ne stampa le prime 10 righe.
Questo significa che l’utente passerà un parametro dalla shell al programma (ovvero il nome del file da leggere). Poi il programma leggerà quel file, per stamparne le prime 10 righe.
[…] a gentle tutorial […]
Ciao! Avrei qualche domandina da fare…
1. Nell’esercizio di ripasso “somma” abbiamo utilizzato il ciclo for ed il ciclo foreach nello stesso modo! Sono interscambiabili, nel senso che vengono utilizzati per fare le stesse identiche cose oppure no ( a rigor di logica quest’ultima dovrebbe essere la risposta giusta dato che non avrebbe senso avere due comandi per fare la stessa identica cosa =D )? Quindi, qual è la differenza fra i due cicli?
2. Utilizzando sia il ciclo for che il ciclo foreach abbiamo sempre specificato la loop variable dopo for/foreach e prima dell’ array. Ho però letto da qualche parte su internet che è possibile anche non specificare questa loop variable: in questo caso verrà automaticamente creata una variabile $_. Che sarebbe???
3. Sempre sul web ho visto che spesso e volentieri quando si dichiara una nuova variabile o si crea un nuovo array o un nuovo hash si pone un “my” davanti (p.es. my $var, my @array, my %hash). A cosa serve questo my?
Grazie =) Ciao!! MG.
1) Abbiamo visto 3 tipi di cicli, il for, il foreach e il while. Ognuno di questi tre (a parte forse il foreach) puo’ in linea di principio sostituire gli altri, quindi non sono strettamente necessari. Pero’ a seconda di cosa vuoi fare, c’e’ normalmente un tipo di ciclo che si presta meglio. Per esempio puoi confrontare le due versioni di somma con il for e il foreach. Con il foreach il programma e’ piu’ breve e semplice, dato che il foreach nasce per ciclare su array. Quando vuoi ciclare un numero determinato di volte ma non su un array, di solito si usa il for. Quando non sai quante volte vuoi ciclare di solito si usa il while. Non c’e’ una regola precisa, e’ questione di esperienza e di gusto personale. I vari tipi di cicli servono a venirvi incontro e lasciarvi scegliere il ciclo che meglio si adatta allo scopo.
2) Le variabili automatiche sono variabili che il perl crea per noi, per esempio @ARGV. Ne esistono parecchie, noi abbiamo scelto di non insegnarvele. Se non specificate la variabile del ciclo il perl la crea automaticamente e la chiama $_. Se la specificate avra’ il nome che le avete dato. Secondo noi, almeno per imparare, e’ meglio evitare le variabili automatiche, perche’ usandole si ottiene un codice molto “implicito”, che e’ piu’ difficile da capire, soprattutto per programmatori poco esperti.
3) Non cerchero’ di spiegarti il “my”, sarebbe lungo, poco utile (almeno per ora) e lo troveresti complicato (almeno per ora). Bisognerebbe fare una lezione solo su quello e dovrei studiare un po’ per prepararla ed essere sicuro di non dire stupidaggini. Vi dico solo che generalmente cambia poco se lo mettete o no e quindi vi consiglio di non metterlo, non dovreste averne bisogno.