From eb9c26d27a742afd90d6448de0ff9c13396fc736 Mon Sep 17 00:00:00 2001 From: dakkar 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(-) 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