summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@luxion>2008-08-13 13:37:56 +0000
committerdakkar <dakkar@luxion>2008-08-13 13:37:56 +0000
commiteb9c26d27a742afd90d6448de0ff9c13396fc736 (patch)
treedad8e18a7d5694982a7d8f69854e3e69fe12f7c2
parentfatte le regex (diff)
downloadintro-perl-eb9c26d27a742afd90d6448de0ff9c13396fc736.tar.gz
intro-perl-eb9c26d27a742afd90d6448de0ff9c13396fc736.tar.bz2
intro-perl-eb9c26d27a742afd90d6448de0ff9c13396fc736.zip
moduli (circa)
git-svn-id: svn://luxion/repos/intro-perl@357 fcb26f47-9200-0410-b104-b98ab5b095f3
-rw-r--r--corso.content.tex181
1 files changed, 180 insertions, 1 deletions
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}