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>▼
▲ 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:
{
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 :
{
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
Se
Il contesto non vincola la funzione ma consente al programmatore di diversificare il valore di ritorno.
Line 152 ⟶ 153:
Vediamo l'esempio
{
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:
{
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]]
|