La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Corso di IMPIANTI DI ELABORAZIONE Seminario: Una panoramica sul PERL Docente: Ing. Vito AstaTutor: Ing. Paolo Molinari.

Presentazioni simili


Presentazione sul tema: "1 Corso di IMPIANTI DI ELABORAZIONE Seminario: Una panoramica sul PERL Docente: Ing. Vito AstaTutor: Ing. Paolo Molinari."— Transcript della presentazione:

1 1 Corso di IMPIANTI DI ELABORAZIONE Seminario: Una panoramica sul PERL Docente: Ing. Vito AstaTutor: Ing. Paolo Molinari

2 2 (P)ratical (E)xtraction and (R)eport (L)anguage Linguaggio parzialmente compilato e parzialmente interpretato Ottima portabililtà Orientato alla manipolazione delle stringhe (espressioni regolari) e alla formattazione dell’output Orientato agli oggetti Disponibilità (freeware) su rete dell’interprete, di una completa documentazione e di una vasta libreria

3 3 STRUTTURA DI UN PROGRAMMA #! /usr/bin/perl -w include BODY functions definitions NON NECESSARIE: dichiarazioni prototipi dichiarazioni variabili e tipi Ma comunque preferibili (use strict)

4 4 Esempio: #! /usr/bin/perl print “Come ti chiami?”; $name = ; chomp($name); if ($name eq ‘Paolo’) { print “Sei il tutor di Impianti\n”; } else { print “Non ti conosco!!!\n”; }

5 5 TIPI DI DATI scalar array hash (associative array) reference Minimo controllo Conversioni automatiche Concetto di “no unnecessary limits”

6 6 TIPI DI DATI: scalar Rappresentazione interna solo in virgola mobile a doppia precisione OPERATORI: + - / * % Sequenza di caratteri di 8 bit 2 tipi di valori (LITERAL) ammissibili: ‘stringa’ oppure “stringa” OPERATORI:. x (Rappresentazione di NUMERI e STRINGHE) Le variabili si indicano con il prefisso $ Conversione automatica dipendente dal contesto (operando) Interpolazione di scalari in stringhe

7 7 Esempio: Print ‘ciao\n’ # visualizza ciao\n print “ciao\n”# visualizza ciao e un newline $str = ‘pippo’; print ‘ciao $str’;# visualizza ciao $str print “ciao $str”;# visualizza ciao pippo $x = 10; $y = --$x; print “risultato = “. ($x + $y)# visualizza risultato = 19

8 8 TIPI DI DATI: array LITERAL: lista indicizzata di scalari (6, 7, pippo) (2, $temp) OPERATORI: assegnazione FUNZIONI: push, pop, unshift, shift, reverse, sort, chomp Gestione dinamica ed automatica della dimensione. Le variabili si indicano con il prefisso @

9 9 Esempi di assegnazione: @tmp = ( );# array vuoto (dimensione 0) @tmp = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); @tmp = (1..10); @tmp = (‘Luca’, ‘Giacomo’, ‘Pino’); @tmp = qw( Luca Giacomo Pino); @tmp1 = @tmp; @tmp1 = (0, @tmp, 11, 12, 13); $len = @temp;# 10 ($len) = @temp;# (10)

10 10 Esempi di accesso: @temp = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); $x = $temp[2];# 3 $x = $temp[99];# undef $last_index = $#temp;# 9 $x = $temp[-3];# 8 @temp2 = @temp[2,3];# Slice, (3, 4) ($a, $b) = ($temp[1], $temp[4]);# $a= 2, $b=4, (2, 4)

11 11 Esempi di funzioni: @temp = qw( pippo pluto qui quo); $value = ‘qua’; push(@temp, $value);# (‘pippo’, ‘pluto’, ‘qui’, ‘quo’, ‘qua’) pop(@temp);# (‘pippo’, ‘pluto’, ‘qui’, ‘quo’) unshift(@temp, ‘minnie’);# (‘minnie’, @temp) shift(@temp);# (‘pippo’, ‘pluto’, ‘qui’, ‘quo’) reverse(@temp);# (‘quo’, ‘qui, ‘pluto’, ‘pippo’) @temp= qw(qui pluto quo pippo); sort @temp;# (‘pippo’, ‘pluto’, ‘qui’, ‘quo’)

12 12 TIPI DI DATI: hash LITERAL: non esiste una rappresentazione dedicata; vengono visti come array FUNZIONI: keys, values, each, delete simile all’array scalari al posto degli indici non esiste ordinamento fra i suoi elementi array associativi Le variabili si rappresentano con il prefisso %

13 13 Esempi: %anagrafica = (‘nome’ => ‘Mario’, ‘cognome’ => ‘Rossi’, ‘eta’ => 52 ); $nome = $anagrafica{‘nome’};# Mario $eta = $anagrafica{‘eta’}# 52 @tutto = %anagrafica; # (‘nome’, ‘Mario’, ‘cognome’, ‘Rossi’, ‘eta’, 51) %anagrafica = qw( nome Angelo cognome Branduardi eta 55); @chiavi = keys %anagrafica;# (‘nome’, ‘cognome’, ‘eta’) $numero_chiavi = keys %anagrafica;# in contesto scalare @valori = values %anagrafica;# (‘Angelo’, ‘Branduardi’, 55) delete $anagrafica{‘nome’};

14 14 REFERENCE Costrutti per allocare memoria (malloc, calloc,…) puntatori Sintassi per creare strutture dati anonime reference CPERL int a, *p; &a; /* memorizza l’indirizzo di a */ p = &a;/* p punta ad a */ int b = *p;/* b e’ uguale ad a */ $a = ‘oggi’; \$a; # rappresenta l’indirizzo della variabile scalare $a $ar = \$a; # $ar punta a $a $b = $$ar; # $b vale ‘oggi’ Un reference è uno scalare che memorizza un indirizzo di memoria

15 15 Esempi di ref. e deref.

16 16 Strutture anonime ed annidate Si crea un puntatore senza partire da variabili già esistenti $ra = []; $rh = {}; Non sono realizzabili esplicitamente (array ed hash contengono solo scalari!) Ma i reference sono scalari e puntano a tutti gli altri tipi Uso dei reference per la realizzazione delle strutture annidate

17 17 Esempio di strutture annidate: vogliamo memorizzare tutti i fratelli di uno studente. %info = (‘nome’ => ‘Mario Rossi’, ‘eta’ => 21, ‘fratelli => [ {‘nome’ => ‘Lucio Rossi’, ‘eta’ => ‘15’ }, {‘nome’ => ‘Andrea Rossi’, ‘eta’ => ‘7’ } ] ) Il valore associato alla chiave ‘fratelli’ è un reference ad un array; gli elementi dell’array sono a loro volta reference ad hash.

18 18 Esempio di strutture annidate: come si costruiscono? La costruzione è implicita con il tipo di assegnazione via via effettuato. %hash1 = (‘nome’=> ‘Lucio Rossi’, ‘eta’, 15); %hash2 = (‘nome’=> ‘Andrea Rossi’, ‘eta’, 7); %info{“fratelli”} = (\%hash1, \%hash2); %info{“nome”} = “Mario Rossi”; %info{“eta”} = 21; Volendo eventualmente una anagrafica di questo tipo per tutti gli studenti, occorrerà definire un array di reference ad anagrafiche come quella appena vista: push(@all_anagraf, \%info)

19 19 STRUTTURE DI CONTROLLO if (expr) { … } else { … } unless (expr) { … } se expr è falsa if (expr1) { … } elsif (expr2) { … } else { … } while (expr) { … } finché è vera, esce non appena è falsa until (expr) { … } for (expr_inz; test; re-init) { … } foreach $t (@array) { … }

20 20 Esempio: $count = 0; while(chomp($input = ) and $count<10) { if($input eq 'n') { next; # riavvia il ciclo, ovvero riparte da while() } $log[$count] = $input; $count++; }

21 21 $count = 0; while(chomp($a = )) { if($a eq 'r') { $a = 'ZZ'; print "redo\n"; redo; } elsif($a eq 'l') { print "last\n"; last; } elsif($a eq 'n') { $count++; print "next\n"; next; } $array[$count] = $a; $count++; } print "array: @array";

22 22 %lovers = ('Romeo’ =>'Giulietta', 'Otello’ =>'Desdemona', 'Dante' =>'Beatrice'); ama(\%lovers); sub ama { my $rh = shift; foreach $lui (keys %$rh) { $lei = $rh->{$lui}; print "$lui ama $lei\n"; }

23 23 FUNZIONI sub MediaAritmetica($) { my $ra = shift;# ra è reference ad array my $somma;# per default inizializza a 0 # per tutti gli elementi dell’array foreach $valore (@$ra) { $somma += $valore; } return ($somma/@len_array); }


Scaricare ppt "1 Corso di IMPIANTI DI ELABORAZIONE Seminario: Una panoramica sul PERL Docente: Ing. Vito AstaTutor: Ing. Paolo Molinari."

Presentazioni simili


Annunci Google