Perl/Funzioni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: apostrofo dopo l'articolo indeterminativo e modifiche minori
m Update syntaxhighlight tags - remove use of deprecated <source> tags
 
Riga 16:
esempio :
<sourcesyntaxhighlight lang=perl>
sub miafunzione
{
Riga 23:
miafunzione;
</syntaxhighlight>
</source>
 
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
 
<sourcesyntaxhighlight lang=perl>
@a = shift ;
</syntaxhighlight>
</source>
 
in realtà è come se il codice scritto fosse:
 
<sourcesyntaxhighlight lang=perl>
@a = shift @_;
</syntaxhighlight>
</source>
 
== I parametri ==
Riga 64:
vediamo questo esempio:
 
<sourcesyntaxhighlight lang="perl">
sub miafunzione
{
Riga 78:
 
miafunzione "pippo" , "pluto";
</syntaxhighlight>
</source>
 
che produrrà:
Riga 102:
Se non specificato è il valore di ritorno dell'ultima istruzione eseguita:
 
<sourcesyntaxhighlight lang=perl> sub miafunzione
{
my $x=print "ciao mondo\n";
Riga 111:
{
print "Questa funzione è vera!\n";
}</sourcesyntaxhighlight>
 
che produrrà :
Riga 123:
Se si vuole invece specificare un valore allora useremo return :
 
<sourcesyntaxhighlight lang=perl> sub miafunzione
{
my %x=("pippo" , "questo e' pippo" , "pluto" , "questo e' pluto");
Riga 134:
{
print "chiave=$c , valore=$v\n";
}</sourcesyntaxhighlight>
 
che produrrà :
Riga 144:
Vediamo ora questo fenomeno:
 
<sourcesyntaxhighlight lang=perl>sub miafunzione
{
my %x=("pippo" , "questo e' pippo" , "pluto" , "questo e' pluto");
Riga 157:
print "chiave=$c , valore=$v\n";
}
</syntaxhighlight>
</source>
 
che produrrà :
Riga 177:
Vediamo l'esempio
 
<sourcesyntaxhighlight lang=perl> sub estrazione
{
if ( wantarray )
Riga 193:
 
print "a=$a\n";
print "b:".join(" , ",@b)."\n";</sourcesyntaxhighlight>
 
che produce:
Riga 215:
Precedentemente alle variabili si è visto come è possibile assegnare diverse cose. Fra queste ci sono anche le funzioni:
 
<sourcesyntaxhighlight lang=perl> my $fun = sub
{
if ( wantarray )
Riga 232:
print "f=$f\n";
print "array fun:".join(" , ",@fun)."\n";
</syntaxhighlight>
</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 !)
 
Riga 238:
 
Guardiamo ora questo codice:
<sourcesyntaxhighlight lang=perl>
sub estrazione
{
Riga 255:
my $a = &$f();
my @b = &$f();
</syntaxhighlight>
</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, così fatta:
<sourcesyntaxhighlight lang=perl>
my $f = \&estrazione();
</syntaxhighlight>
</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.
 
<sourcesyntaxhighlight lang=perl>
print "a=$a\n";
print "b:".join(" , ",@b)."\n";
</syntaxhighlight>
</source>
Dato che $f è una variabile è possibile usarla come un reference (infatti lo è), pertanto è possibile usare la sintassi -> :
<sourcesyntaxhighlight lang=perl>
my $a = $f->();
my @b = $f->();
</sourcesyntaxhighlight>
== 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:
<sourcesyntaxhighlight lang=perl>
sub estrazione
{
Riga 343:
print "---\n";
$f ->(6)->(3,0,2);
</syntaxhighlight>
</source>
che produce :