From 8c8bbe8d000831b58190d4fc76e7babae2806086 Mon Sep 17 00:00:00 2001
From: dakkar <dakkar@luxion>
Date: Sat, 9 Aug 2008 09:28:43 +0000
Subject: contesto, e spostato hash prima di sub

git-svn-id: svn://luxion/repos/intro-perl@352 fcb26f47-9200-0410-b104-b98ab5b095f3
---
 corso.content.tex | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 82 insertions(+), 5 deletions(-)

(limited to 'corso.content.tex')

diff --git a/corso.content.tex b/corso.content.tex
index 0a71925..623b4c2 100644
--- a/corso.content.tex
+++ b/corso.content.tex
@@ -713,17 +713,84 @@ Questo {\em cambia il valore} degli elementi dell'array \lstinline!@fratelli!.
 \end{frame}
 %$
 
+\begin{frame}[fragile]\frametitle{Assegnamenti nel ciclo}
+\begin{lstlisting}
+foreach my $fratello (qw(Cino Dino Gino Lino)) {
+  $fratello="<$fratello>";
+}
+\end{lstlisting}
+
+Questo {\em è un errore}.
+\end{frame}
+%$
+
 \subsection{Il contesto}
 
-\section{Subroutine}
+\begin{frame}\frametitle{Contesto scalare e lista}
+\begin{itemize}
+\item ciascuna espressione in un programm \Perl\ viene valutata in un certo {\em contesto}
+\item il contesto può essere {\em scalare} o {\em lista}
+\item molte funzioni restituiscono risultati diversi a seconda del contesto
+\end{itemize}
+\end{frame}
 
-\subsection{Definizione}
+\begin{frame}[fragile]\frametitle{Contesto scalare: esempi}
+\begin{lstlisting}[escapeinside=«»]
+$nome = «{\em \sffamily qualcosa}»;
+$totali[3] = «{\em \sffamily qualcosa}»;
+10 + «{\em \sffamily qualcosa}»;
+«{\em \sffamily qualcosa}» + 10;
+if («{\em \sffamily qualcosa}») { ... }
+while («{\em \sffamily qualcosa}») { ... }
+$persone[«{\em \sffamily qualcosa}»] = «{\em \sffamily qualcos'altro}»;
+\end{lstlisting}
+\end{frame}
+%$
 
-\subsection{Invocazione}
+\begin{frame}[fragile]\frametitle{Contesto lista: esempi}
+\begin{lstlisting}[escapeinside=«»]
+@persone = «{\em \sffamily qualcosa}»;
+($primo, $secondo) = «{\em \sffamily qualcosa}»;
+($primo) = «{\em \sffamily qualcosa}»;
+push @totali, «{\em \sffamily qualcosa}»;
+print «{\em \sffamily qualcosa}»;
+foreach my $nome («{\em \sffamily qualcosa}») { ... }
+\end{lstlisting}
+\end{frame}
 
-\subsection{Argomenti e valore di ritorno}
+\begin{frame}[fragile]\frametitle{Contesto scalare: casi particolari}
+\begin{itemize}
+\item un array in contesto scalare restituisce il numero di elementi: \lstinline!my @a=('a'..'z');my $c=@a;print $c! scrive \lstinline!26!
+\item una {\em lista} in contesto scalare restituisce l'ultimo elemento (e spesso genera warning): \lstinline!my $a=qw(a b c);print $a! scrive \lstinline!c!
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]\frametitle{Contesto lista: casi particolari}
+\begin{itemize}
+\item \lstinline!my @a=(1..10);@a=()! svuota l'array
+\item \lstinline!my @a=(1..10);@a=undef! {\em non} svuota: \lstinline!@a! contiene un elemento, il cui valore è \lstinline!undef!
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]\frametitle{Forzare il contesto}
+\begin{lstlisting}
+my @a;print scalar @a; # forza contesto scalare
+
+# forza contesto lista, e assegna a scalare
+my $lunghezza=()=funzione_lista();
+\end{lstlisting}
+\end{frame}
+%$
+
+\begin{frame}[fragile]\frametitle{Input in contesto lista}
+\begin{lstlisting}
+my @linee=<>;  # legge tutto l'input in memoria
+chomp(@linee); # toglie tutti gli "a capo"
+\end{lstlisting}
+
+\visible<2->{{\em Non} fatelo se non siete sicuri che l'input sia piccolo}
+\end{frame}
 
-\subsection{Variabili lessicali}
 
 \section{Hash}
 
@@ -733,6 +800,16 @@ Questo {\em cambia il valore} degli elementi dell'array \lstinline!@fratelli!.
 
 \subsection{Funzioni}
 
+\section{Subroutine}
+
+\subsection{Definizione}
+
+\subsection{Invocazione}
+
+\subsection{Argomenti e valore di ritorno}
+
+\subsection{Variabili lessicali}
+
 \section{Input/Output}
 
 \subsection{Qualche dettaglio in più}
-- 
cgit v1.2.3

