PErl 1 : interprete, numeri, stringhe
In Windows con installazione ActiveState la documentazione si ricava col comando
C:>perldoc
Ci sono varie sezioni come perlfunc (perl fucntions), perlop (perl operators), perlfaq (le FAQ di perl).
Per avere la documantazione di una parola chiave si usa lo switch -tf. Per esempio Per avere il output della documantazione del comando print
C:>perldoc -tf perl
Per setacciare le FAQ relative ad un argomento c’è lo switch -q; per esempio, voglio avere le FAQ disponibili sull’argomento ‘support’, digito
C:>perldoc -q support
In Windows Activestate v5.24 la documentazione è in formato html non esistendo il comando man e tale documentazione si trova nel folder C:\Perl64\html.
Come ogni bookguide su linguaggi di programmazione, faremo il nostro primo stupidissimo programmino coll’output di “Hello World!”.
Il primo rigo è l’invocazione del perl interpreter che si scrive col il pund e il punto escalamativo #! E poi il percorso del perl interpreter che si può scrivere sia per windows che per unix come /usr/bin/perl. Poi si scrive il primo statement che per questo stupido programmino è l’invocazione della funzione print per la esecuzione dell’input ad output di default, cioè il video e tale output in questo caso è la stringa letterale “Hello World!\n”. La stringa letterale inizia e finisce coi doppi apici; \n indica neww line. Lo statement va terminato con un semicolon ; che in perl indica la fine dello statement.
Per quanto riguarda i commenti in perl, il commento su riga singola si determina col carattere pound # posto all’inizio della riga.
Le estensioni degli script in perl sono .pl oppure.plx.
Scriviamo il nostro programmino -che chiamiano HelloWorld.pl.
#!/usr/bin/perl
print “Hello World!\n”;
I numeri in Perl si dividono in interi come 1 oppure 2 ecc e poi ci sono i floating point number cioè i decimali come 10.21 e il separatore e il dot secondo la notazione anglofona e poi abbiamo i numeri in notazione scentifica come 6.677E-2 e poi numeri in notazione ottale cioè in base 8 che iniziano con lo 0 come 010 e poi in notazione esadecimale che iniziano con 0x e poi ecc ecc.
Passiamo all stringhe letterale che sono delimitate coi quoting che sono l’apice singolo ‘ o l’apice doppio “.
Se dobbiamo inserire un apice singolo o doppio all’interno della stringa, l’apice singolo o doppio va preceduto dal backslash . Per esempio la stringa “Luigi ha esclamato: “Ciao!”.” va scritta precedendo i doppi apici interni con il baclslach e cioè “Luigi ha esclamato: \“Ciao!\”.”
Le stringhe delimitate da apice singolo non fanno interpolazione delle variabili e degli escape sequences, invece le stringhe delimitate da doppi apici fanno interpolazione delle variabili e delle escape sequences.
Le escape sequences più usate sono:
\n new line
\r carriage return
\t tab
\b backspace
\u change next character uppercase
\l change next character lowercase
\ a literal backlash
\’ singolo apice dentro la stringa
\” doppio apice dentro la stringa
Al posto di apice singolo o doppio, si puo usare l’operatore di quoting q equivalente ad apice singolo oppure qq equivalente ad apice doppio il quale praticamente esegue il quoting della literal string e l’operatore q o qq necessita di un paio di delimiters per appunto delimitare la stringa e questi delimiters possono essere qualsiasi carattere come parentesi tonde () oppure parentesi graffe {} ecc. Inoltre l’operatore q o qq annida i delimiters in modo appropriato e quindi se c’è un delimiter dentro la stringa letterale non c’è bisogno di anteporre l’escaping character backslash davanti al delimiter interno anche se per una buona leggibilità non si dovrebbero usare delimiters di qq che siano presenti all’interno della stringa.
La variabile più semplice è la variabile scalare, cioè che contiene un valore scalare e che è introdotta dal type identifier $. Tutte le variabili (scalari, ashes, arrays, filehandlers) soggiacciono alle seguenti poche regole: - i nomi di variabili contengono caratteri alfanumeri e l’underscore, ma i nomi non possono iniziare con un numero ma soltanto con alfabetici e underscore; - i nomi sono case sensitive. Perl si riserva per se stesso tutte le single-character variable names che non inizino con un alfabetico o l’underscore e in più variabili come $, $’, $/, $1, $2 ecc sono usate per scopi specifici. In perl non c’e’ bisogno di inizializzare le variabili; basta assegnare un valore alla variabile. Se la variabile non riceve un valore, di default le variabili numerico ricevono lo zero e le variabili stringhe ricevono il valore della stringa vuota ‘’. La variabile $ è usata da molti operatori come variabile di default e come tale puo’ non essere dichiarata nello statement che evoca l’operatore. L’uguale = è l’operatore di assegnamento nel senso che assegna l’operando sulla destra che è un valore oppure un’espressione) alla variabile sulla sinisra. Lo stesso assegnamento è un’espressione; per cui
$a=$b=$c=4;
significa che $a e $b e $c hanno valore quattro. La stessa variabile a sinistra si puo’ ripetere sulla destra dell’uguale. Per esempio
$count = 0 ; #la variabile $count è inizializzata a 0
$count = $count + 1 ; #la variabile $count a destra vale 0 e a sinistra vale 1.
Gli operatori matematici piu’ semplici sono addizione +, sottrazione -, moltiplicazione *, divisione /, modulus o resto della divisione %, elevamento a potenza **. Gli operatori nelle espressioni vengono eseguiti secondo l’ordine seguente: elevamento a potenza, moltiplicazione, divisione, modulus, addizione e sottrazione.
Per le stringhe litterali l’operatore punto . è l’operatore di concatenazione nel senso che concatena la variable di destra con la variabile di sinistra. La concatenazione di variabili si ha anche con la interpolazione di variabili che si attua delimitando la variabile con doppi apici oppure con l’operatore qq e delimiters enel momento in cui si scrive la variabile nella stringa questa viene interpolata. Se non si vuole interpolare una variabile all’interno dells stringa, si delimita la stringa con l’apice singolo oppure l’operatore q piu’ delimiters oppure si mette un backslash di escape davanti al type identifier introducente il variable name.
Altra questione riguardante ‘interpolazione di variabile è che se il variable name è attaccato alla fine ad un carattere alfanumerico o non alfanumerico. il perl interpreter non capisce dove finisce il variable name e dove inizia il resto della stringa e va in confusione finendo per non interpolare la variabile ma trattando il variable name più i caratteri attaccati come un tutt’uno; per ovviare a ciò si deve delimitare il variable name con le parentesi graffe {} che devono essere messe subito il type identifier e la fine del variable name. Per esempio
$date=”Tuesday”;
print “I went to the fair on ${date}day”;
Perl capisce che deve interpolare il variable name $date # che ${date} è separato da day.
Alcuni operatori unari cioè che prendono in pasto un solo operando che viene chiamato argomento:
int , operatore di intero che ritorna la parte intera dell’argomento fra parentesi. Ex: int (5.48) ritorna 5;
lenght, operatore di lunghezza cher ritorna la lunghezza cioe’ il numer di caratteri della stringa argomento. EX. lenght(“pippo”) ritorna 5.;
lc, operatore di lowercase, che ritorna l’argomento traslato tutto in minuscolo. EX: lc (“ME TOO”) ritorna “me too”;
uc , ooperatore di maiuscolo, che ritorna l’argomento in maiuscolo. EX: uc(“hal 9000”) ritorna “HAL 9000”.
cos, operatore di coseno, che ritorna l’argomento in radianti.
rand, operatore di random, che ritorna un numero random scelto da0 fino al suo argomento. Ex: rand(5) restituisce un numero fra 0 e 5 e se non si specifica un argomento rad restituisce un numero fra 0 e 1.
Gli operatori e le funzioni si possono listare con
C:>perldoc perlop
C:>perldoc perlfun
L’operatore autoincremento ++ incrementa l’operando di uno e $a++; equivale a $a=$a+1;
L’operatore autodecremento -- decrementa l’operando di uno e $a--; equivale a $a=$a-1;
L’operatore autoincremento ++ qualora applicato su una variabile stringa che comincia con un carattere alfabetico e prosegue con caratteri alfanumerici, incrementa di uno il carattere della stringa piu’ a destra di tutti e suddetto carattere se è numero viene aumentato di uno e se è alfabetico viene shiftato nel carattere successivo nell’ambito della sequenza ASCII.
Esempi:
$a=”999”;
print $a++; # stampa “1000”
$b=”c9”;
print $b++; #stampa d0 perchè 9+1=10 e l’uno viene aggiunto alla c che diventa d
$c=”zzz”;
print $c++; #stampa “aaaa”.
L’operatore diamante <> è uato per leggere e scrivere sui files.
L’operatore angolo " il tag < + la parola stdin + il tag > " è l’operatore che induce il perl interpreter a leggere tutto quello che riceve da standard input, cioè la tastiera, fino a che l’utente non digita il comando Enter e l’operatore " il tag < + la parola stdin + il tag > " attacca un carattere “\n” alla sequenza introdotta dalla tastiera e se a sinistra di " il tag < + la parola stdin + il tag > " c’è l’operatore di assegnamento, tutta la linea da standard input più il new line escape sequence viene assegnato all’operando a sinistra. Per togliere il new line escape sequence al valore restituito da " il tag < + la parola stdin + il tag > ", bisogna applicare l’operatore chom alla variabile a cui è stato assegnato l’output fornito da " il tag < + la parola stdin + il tag > ".
Esempio
print “Scegli un numero fra 0 e 10:”;
$num=" il tag < + la parola stdin + il tag > ";
chomp($num);
print “Il numero che hai scelto è $num\n”;
Essendo l’operatore uguale = di assegnamento, la combinazione dell’operatore di assegnamento con un operatore matematico è un operatore a sua volta che all’operando di sinistra applica l’operatore matematico con l’espressione di sinistra e il risultato lo riassegna all’operando di sinistra e la sintassi generale è
variabile-name operatore = espressione ;
che equivale alla sintassi
variabile-name = variabile name operatore espressione;
Esempi:
$line .= “, at the end.”; # appende “, at the end.” alla fine di $line
$y *= $x; # equivale a $y = $y * $x
Il perl interpreter tratta numeri e stringhe interchangebly.
Se la variabile assomiglia ad un numero, perl la usa come numero quando ha bisogno di un numero.
Es:
$a=”50”;
print $b - 10; # Stampa “40”
Se la variabile assomigla a un numero e Perl ha bisogno di una string, Perl fa uso della rappresentazione stringale dei numeri
Es:
$a=42/3;
$a .= “Hello”; # perl usa il numero come stringa
print $a; # stampa “14Hello”
Se la variabile non sembra un numero e Perl ha bisogno di trattare la variabile come un numero, allora perl taglia corto riducendo la variabile a 0.
Es:
$a=”Hello World!”;
print $a+&; # Stampa il numero 6.
Per vedere i warnings al momento dell’esecuzione, si usa lo switch -w
C:>perl -w hello.pl
Congratulations @wybrzeze! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!