Perl/Funzioni: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: apostrofo dopo l'articolo indeterminativo e modifiche minori |
m Update syntaxhighlight tags - remove use of deprecated <source> tags |
||
Riga 16:
esempio :
<
sub miafunzione
{
Riga 23:
miafunzione;
</syntaxhighlight>
nell'esempio indicato la funzione "miafunzione" non usa parametri e non esplicita un valore di ritorno.
Riga 39:
quindi se si vedono nel codice comandi tipo
<
@a = shift ;
</syntaxhighlight>
in realtà è come se il codice scritto fosse:
<
@a = shift @_;
</syntaxhighlight>
== I parametri ==
Riga 64:
vediamo questo esempio:
<
sub miafunzione
{
Riga 78:
miafunzione "pippo" , "pluto";
</syntaxhighlight>
che produrrà:
Riga 102:
Se non specificato è il valore di ritorno dell'ultima istruzione eseguita:
<
{
my $x=print "ciao mondo\n";
Riga 111:
{
print "Questa funzione è vera!\n";
}</
che produrrà :
Riga 123:
Se si vuole invece specificare un valore allora useremo return :
<
{
my %x=("pippo" , "questo e' pippo" , "pluto" , "questo e' pluto");
Riga 134:
{
print "chiave=$c , valore=$v\n";
}</
che produrrà :
Riga 144:
Vediamo ora questo fenomeno:
<
{
my %x=("pippo" , "questo e' pippo" , "pluto" , "questo e' pluto");
Riga 157:
print "chiave=$c , valore=$v\n";
}
</syntaxhighlight>
che produrrà :
Riga 177:
Vediamo l'esempio
<
{
if ( wantarray )
Riga 193:
print "a=$a\n";
print "b:".join(" , ",@b)."\n";</
che produce:
Riga 215:
Precedentemente alle variabili si è visto come è possibile assegnare diverse cose. Fra queste ci sono anche le funzioni:
<
{
if ( wantarray )
Riga 232:
print "f=$f\n";
print "array fun:".join(" , ",@fun)."\n";
</syntaxhighlight>
Da notare che non c'è il nome dopo sub e che il nome "nell'uso" è stato sostituito dal nome della variabile (con il $ davanti !)
Riga 238:
Guardiamo ora questo codice:
<
sub estrazione
{
Riga 255:
my $a = &$f();
my @b = &$f();
</syntaxhighlight>
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, così fatta:
<
my $f = \&estrazione();
</syntaxhighlight>
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.
<
print "a=$a\n";
print "b:".join(" , ",@b)."\n";
</syntaxhighlight>
Dato che $f è una variabile è possibile usarla come un reference (infatti lo è), pertanto è possibile usare la sintassi -> :
<
my $a = $f->();
my @b = $f->();
</
== Funzioni con ritorno a funzione (nome o anonima) ==
Riga 281:
Se si torna una funzione poi questa deve essere lanciata per poter ottenere un risultato.
Vediamo ora questo codice:
<
sub estrazione
{
Riga 343:
print "---\n";
$f ->(6)->(3,0,2);
</syntaxhighlight>
che produce :
|