Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Guida alla programmazione in Perl: lo scope delle variabili (3/3)
Scritto da Alessandro Piccarolo il 21-05-2010 ore 10:45
Un esempio notevole di utilizzo dell’operatore my per dichiarare variabili, il cui ambito di visibilità è locale a un blocco, è rappresentato dalle subroutine ricorsvie, ossia subroutine che richiamano se stesse fino a che una determinata condizione non viene verificata; è fondamentale che questa condizione esista onde evitare la creazione di un loop infinito. Un classico esempio di subroutine ricorsiva è il calcolo del fattoriale di un numero:
  1. sub fattoriale{
  2.   my ($value) = @_;
  3.   if($value == 1)
  4.   {
  5.     return(1);
  6.   }
  7.   return($value * fattoriale($value - 1));
  8. }
  9.  
  10. print fattoriale(6);
Come si evince dagli esempi finora illustrati, Perl è un linguaggio molto permissivo, in quanto si adatta alle scelte del programmatore senza intromettersi nello stile di programmazione. Ciononostante, è possibile configurare Perl in modo da ottenere un controllo più restrittivo su ciò che lo sviluppatore scrive, evitando così grossolani errori di programmazione. Oltre alla già descritta opzione -w per abilitare i warning di compilazione, il package di installazione di Perl comprende per default anche il modulo strict, il quale esegue in fase di compilazione una serie di verifiche, tra cui quella che obbliga il programmatore a dichiarare tutte le variabili globali prima di usarle.

L’abilitazione di questo modulo — ai moduli verrà dedicato un capitolo apposito del tutorial; per il momento, si pensi ad essi come a un insieme di subroutine preconfezionate, che estendono le funzionalità di base di Perl — mediante la funzione use, rappresenta una buona regola di programmazione, in quanto permette di avere un maggiore controllo sulle variabili con scope globale, evitando così conflitti ed errori dovuti a modifiche di tali variabili da parte di blocchi di codice differenti.

Con l’utilizzo del modulo strict, l’esempio della prima parte di questa lezione verrebbe riscritto nel seguente modo:
  1. use strict;
  2. my $scalar = "globale";
  3. print "Fuori dal blocco, $scalar e’ una variabile $scalar\n";
  4. {
  5.   my $scalar = "locale";
  6.   my $other_scalar = "I am also lexical";
  7.   print "Dentro il blocco, $scalar e’ una variabile $scalar\n";
  8. }
  9. print "Di nuovo fuori dal blocco, $scalar e’ sempre una variabile $scalar\n";
Il modulo strict verifica anche l’utilizzo errato di nomi di cui non sia stato specificato il tipo. Ad esempio, l’assegnazione seguente è ambigua in quanto il nome value può rappresentare una variabile di cui è stato dimenticato il qualificatore di tipo, una chiamata a subroutine, oppure ancora una stringa di cui sono stati dimenticati gli apici:
  1. $var = value;
Il modulo strict è in grado di evidenziare questa ambiguità, rappresentando in tal modo un ulteriore strumento di debug.
Precedente: Un algoritmo per identificare univocamente un computer
Successiva: La sicurezza informatica attraverso CPU innovative
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 1.193 secondi.