From eb9c26d27a742afd90d6448de0ff9c13396fc736 Mon Sep 17 00:00:00 2001
From: dakkar <dakkar@luxion>
Date: Wed, 13 Aug 2008 13:37:56 +0000
Subject: moduli (circa)

git-svn-id: svn://luxion/repos/intro-perl@357 fcb26f47-9200-0410-b104-b98ab5b095f3
---
 corso.content.tex | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 180 insertions(+), 1 deletion(-)

(limited to 'corso.content.tex')

diff --git a/corso.content.tex b/corso.content.tex
index 1ea0e3b..6328ba9 100644
--- a/corso.content.tex
+++ b/corso.content.tex
@@ -248,7 +248,7 @@ use warnings;
 \begin{itemize}
 \item \lstinline!2 < 3!
 \item \lstinline!7.5 > 5!
-\item \lstinline!4 != 12e3!
+\item \lstinline/4 != 12e3/
 \item \lstinline!3 <= 7!
 \item \lstinline!5 >= 2!
 \item \lstinline!3 == 3!
@@ -1340,6 +1340,7 @@ se la stringa appartiene alla famiglia descritta dalla regex
 \item come \lstinline!qw!, anche \lstinline!m! può usare i
 delimitatori che volete
 \item si può scrivere anche \lstinline!//!, usando le barre e senza la 'm'
+\item \lstinline/!~/ nega il risultato del match
 \end{itemize}
 \end{frame}
 
@@ -1442,6 +1443,7 @@ stringa}) %$
 \item \lstinline!/x! ignora gli spazi nella regex, per aumentare la
 leggibilità (mettete una \lstinline!\! davanti agli spazi che devono
 esserci)
+\item \lstinline!/i! fa in modo che maiuscole e minuscole non vengano distinte
 \item \lstinline!/g! fa in modo che la sostituzione avvenga in tutti i
 punti che corrispondono alla regex, non solo il primo
 \end{itemize}
@@ -1449,22 +1451,199 @@ punti che corrispondono alla regex, non solo il primo
 
 \section{Controllo del flusso}
 
+\begin{frame}[fragile]\frametitle{Strutture di controllo}
+Abbiamo visto \lstinline{if}:
+\begin{lstlisting}
+if ($totale < 0) { print "Eh?\n" }
+\end{lstlisting}
+
+E abbiamo visto \lstinline!while!:
+\begin{lstlisting}
+while (<> !~ /^[sn]/) {
+ print "Rispondi sì o no\n"
+}
+\end{lstlisting}
+\end{frame}
+%$
+
 \subsection{Controlli negati} % unless, until
 
+\begin{frame}[fragile]\frametitle{Controlli negati}
+Il contrario di \lstinline{if} è \lstinline!unless!:
+\begin{lstlisting}
+unless ($totale >= 0) { print "Eh?\n" }
+\end{lstlisting}
+
+Il contrario di \lstinline!while! è \lstinline!until!:
+\begin{lstlisting}
+until (<> =~ /^[sn]/) {
+ print "Rispondi sì o no\n"
+}
+\end{lstlisting}
+\end{frame}
+%$
+
 \subsection{Modificatori}
 
+\begin{frame}[fragile]\frametitle{Modificatori}
+Le strutture di controllo di flusso possono essere scritte anche in un altro modo:
+
+\begin{lstlisting}
+print "Eh?\n" if $totale < 0;
+print "Eh?\n" unless $totale >= 0;
+print "Rispondi sì o no\n" while <> !~ /^[sn]/;
+print "Rispondi sì o no\n" until <> =~ /^[sn]/;
+\end{lstlisting}
+
+Possono modificare solo una istruzione, non un blocco.
+\end{frame}
+
 \subsection{\texttt{for}}
 
+\begin{frame}[fragile]\frametitle{\texttt{for}}
+Per i nostargici del C:
+\begin{lstlisting}
+for (my $i=0;$i<@array;++$i) {
+ print "\$array[$i] -> $array[$i]\n";
+}
+\end{lstlisting}
+
+Si usa piuttosto di rado.
+\end{frame}
+
 \subsection{Controllo dei cicli}
 
+\begin{frame}[fragile]\frametitle{Uscire dal ciclo}
+\begin{lstlisting}
+while (my $line=<>) {
+ chomp($line);
+ last if $line =~ /^exit$/i;
+ run_command($line);
+}
+\end{lstlisting}
+%$
+\end{frame}
+
+\begin{frame}[fragile]\frametitle{Saltare un'iterazione}
+\begin{lstlisting}
+while (my $line=<>) {
+ chomp($line);
+ next if $line =~ /^\s*#/;
+ last if $line =~ /^exit$/i;
+ run_command($line);
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]\frametitle{Ripetere un'iterazione}
+\begin{lstlisting}
+for my $parola (@parole) {
+ pronuncia($parola);
+ my $tentativo=<>;chomp($tentativo);
+ if ($tentativo eq $parola) {
+  print "Bravo!\n";
+ }
+ else {
+  print "No, rirprova\n";
+  redo;
+ }
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]\frametitle{Iterazioni annidate}
+\begin{lstlisting}
+LINEA: while (my $linea=<>) {
+  chomp($linea);
+  my (@parole)=split /\s+/,$linea;
+  for my $parola (@parole) {
+    next LINEA if $parola eq '--';
+    usa_parola($parola);
+  }
+}
+\end{lstlisting}
+\end{frame}
+
 \section{Moduli}
 
 \subsection{Cosa sono}
 
+\begin{frame}\frametitle{Cos'è un modulo?}
+\begin{itemize}
+\item un insieme di funzioni riusabili
+\item un insieme di funzionalità riusabili
+\item un'estensione del linguaggio
+\end{itemize}
+\end{frame}
+
+\begin{frame}\frametitle{Come si scrive un modulo?}
+Non ve lo dico.
+
+\visible<2->{No, seriamente: questo è un corso introduttivo. Scrivere moduli è un argomento abbastanza avanzato.}
+\end{frame}
+
+\begin{frame}[fragile]\frametitle{Come si usa un modulo?}
+\begin{lstlisting}
+use strict; use warnings;
+use Cwd;
+
+print 'La directory corrente è: ',cwd(),"\n";
+\end{lstlisting}
+
+\lstinline!use! importa un modulo, e permette di usarne le funzioni.
+\end{frame}
+
+
+\begin{frame}\frametitle{Come dovete usare i moduli}
+\begin{itemize}
+\item scoprite cosa vi serve
+\item trovate il modulo giusto
+\item installatelo
+\item studiate la documentazione
+\item scrivete il vostro programma
+\end{itemize}
+\end{frame}
+
 \subsection{CPAN}
 
+\begin{frame}\frametitle{Dove stanno i moduli?}
+
+CPAN
+
+\begin{itemize}
+\item Comprehensive Perl Archive Network
+\item decine di miglialia di distribuzioni
+\item tutte testate e documentate
+\item non proprio tutte utili\ldots
+\item \url{http://www.cpan.org/}
+\item \url{http://search.cpan.org/}
+\end{itemize}
+\end{frame}
+
 \subsection{Installazione} % CPAN.pm, distribuzioni e local::lib
 
+\begin{frame}[fragile]\frametitle{\texttt{CPAN.pm}}
+\texttt{\$ perl -MCPAN -e shell} (o \texttt{\$ cpan})
+\begin{semiverbatim}
+cpan shell
+cpan> \textbf{install The::Module}
+\end{semiverbatim}
+
+Questo scarica, testa, e installa il modulo che avete chiesto. Notare che alcuni moduli possono richiedere un compilatore C.
+
+{\footnotesize \texttt{CPAN.pm} può richiedere un po' di configurazione, la prima volta che lo eseguite}
+\end{frame}
+
+\begin{frame}\frametitle{Ma io non sono \texttt{root}!}
+\texttt{CPAN.pm}, di solito, installa i moduli nelle directory di sistema.
+
+Se non avete i poteri di amministratore, questo è un problema.
+
+Il modulo \texttt{local::lib} semplifica il procedimento per installare moduli nella vostra {\em home directory}.
+\end{frame}
+
+% -> notation, new
+
 \section{Filehandle}
 
 \subsection{Leggere e scrivere file}
-- 
cgit v1.2.3

