La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corso di IMPIANTI DI ELABORAZIONE

Presentazioni simili


Presentazione sul tema: "Corso di IMPIANTI DI ELABORAZIONE"— Transcript della presentazione:

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

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 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 Esempio: #! /usr/bin/perl print “Come ti chiami?”;
$name = <STDIN>; chomp($name); if ($name eq ‘Paolo’) { print “Sei il tutor di Impianti\n”; } else { print “Non ti conosco!!!\n”;

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

6 TIPI DI DATI: scalar (Rappresentazione di NUMERI e STRINGHE) 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 Le variabili si indicano con il prefisso $ Conversione automatica dipendente dal contesto (operando) Interpolazione di scalari in stringhe

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

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 @tmp1 = 11, 12, 13); $len # 10 ($len) # (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 # Slice, (3, 4) ($a, $b) = ($temp[1], $temp[4]); # $a= 2, $b=4, (2, 4)

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

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

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 REFERENCE C PERL Costrutti per allocare memoria (malloc, calloc,…)
puntatori Sintassi per creare strutture dati anonime reference 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 Esempi di ref. e deref.

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

17 Esempio di strutture annidate:
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 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: \%info)

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 { }

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

21 $count = 0; while(chomp($a = <STDIN>)) { 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; print

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 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 { $somma += $valore; } return


Scaricare ppt "Corso di IMPIANTI DI ELABORAZIONE"

Presentazioni simili


Annunci Google