Perl/Funzioni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Bot: Sostituzione automatica (- perchè + perché)
sintassi codice colorata
Riga 7:
per indicare una funzione il Perl adotta la parola chiave sub (in inglese subrutine).
 
<source lang=perl>sub <nome>
{
... istruzioni ...
Riga 18:
print "ciao mondo\n";
}
[[Categoria:nome della categoria]]
miafunzione();</source>
 
nell'esempio indicato la funzione "miafunzione" non usa parametri.
miafunzione();
 
nell'esempio indicato la funzione "miafunzione" non usa parametri.
I parametri passati ad una funzione sono variabili.
Riga 31:
La dichiarazione rimane inalterata ma la chiamata invece si modifica:
 
<source lang=perl>sub <nome>
{
... istruzioni ...
Riga 37:
 
<nome> (<parametro1>,<parametro2>,...,<parametroX>);
</source>
 
vediamo questo esempio:
 
<source lang=perl>sub miafunzione
{
print "ciao mondo\n";
Riga 52:
}
 
miafunzione("pippo" , "pluto");</source>
 
che produrrà:
Riga 77:
Se non specificato è il valore di ritorno dell'ultima istruzione eseguita:
 
<source lang=perl> sub miafunzione
{
my $x=print "ciao mondo\n";
Riga 86:
{
print "Questa funzione è vera!\n";
}</source>
}
 
che produrrà :
Riga 98:
Se si vuole invece specificare un valore allora useremo return :
 
<source lang=perl> sub miafunzione
{
my %x=("pippo" , "questo e' pippo" , "pluto" , "questo e' pluto");
Riga 109:
{
print "chiave=$c , valore=$v\n";
}</source>
}
 
che produrrà :
Riga 119:
Vediamo ora questo fenomeno:
 
<source lang=perl>sub miafunzione
{
my %x=("pippo" , "questo e' pippo" , "pluto" , "questo e' pluto");
Riga 132:
print "chiave=$c , valore=$v\n";
}
</source>
 
che produrrà :
Line 142 ⟶ 143:
== Il ritorno a seconda del contesto ==
 
Se assegnamoassegniamo il valore di ritorno di una funzione ad una variabile scalare avremo un "contesto" scalare.
Se assegnamoassegniamo il valore di ritorno di una funzione ad una variabile array/hash (lista) avremo un "contesto" lista.
 
Il contesto non vincola la funzione ma consente al programmatore di diversificare il valore di ritorno.
Line 152 ⟶ 153:
Vediamo l'esempio
 
<source lang=perl> sub estrazione
{
if ( wantarray )
Line 168 ⟶ 169:
 
print "a=$a\n";
print "b:".join(" , ",@b)."\n";</source>
 
che produce:
Line 190 ⟶ 191:
Precedentemente alle variabili si è visto come è possibile assegnare diverse cose.Fra queste ci sono anche le funzioni:
 
<source lang=perl> my $fun = sub
{
if ( wantarray )
Line 207 ⟶ 208:
print "f=$f\n";
print "array fun:".join(" , ",@fun)."\n";
</source>
 
Da notare che non c'è il nome dopo sub e che il nome "nell'uso" è stato sostituito dal nome della variabile (con il $ davanti !)
 
Line 213 ⟶ 214:
 
Guardiamo ora questo codice:
<source lang=perl>
 
sub estrazione
{
Line 230 ⟶ 231:
my $a = &$f();
my @b = &$f();
</source>
 
Quindi in questo modo si è sostituito il "nome" della funzione con la variabile $f.
Prestate molta attenzione alla sintassi.
Infatti $f viene assegnato un reference "\" alla funzione "&" chiamata "estrazione".
Ben diverso è una chiamata a così fatta:
<source lang=perl>
 
my $f = \&estrazione();
</source>
 
Infatti in questo caso verrà interpretato come:
$f viene assegnato un reference "\" al valore di ritorno della funzione "&" chiamata "estrazione" con parametri nulli.
Infatti &estrazione() da luogo alla chiamata della funzione così come &$f(). Mentre \&estrazione fa solo un riferimento ma non invoca la funzione.
 
<source lang=perl>
 
print "a=$a\n";
print "b:".join(" , ",@b)."\n";
</source>
 
Dato che $f è una varibile è possibile usarla come un reference (infatti lo è) pertanto è possibile usare la sintassi -> :
<source lang=perl>
 
my $a = $f->();
my @b = $f->();
</source>
== Funzioni con ritorno a funzione (nome o anonima) ==
 
Line 256 ⟶ 257:
Se si torna una funzione poi questa deve essere lanciata per poter ottenere un risultato.
Vediamo ora questo codice:
<source lang=perl>
 
sub estrazione
{
Line 318 ⟶ 319:
print "---\n";
$f ->(6)->(3,0,2);
</source>
 
che produce :
 
Line 331 ⟶ 332:
Da notare che nella funzione estrai nel ritorno di funzione ci sono dei dati passati alla prima.Questo è possibile perché la funzione viene "cablata" con il valore della variabile nel codice della funzione ritornata.
Come detto all'inizio è preferibile usare ,per la manutenzione, le chiamate a funzioni esplicite che nella forma anonima/nominale.
[[Categoria:Linguaggio Perl|Funzioni]]