Concludendo questo capitolo è opportuno citare anche la funzione
eval, che consente di valutare espressioni Perl. Questa funzione, che
appare subito estremamente potente, può risultare spesso difficilmente
utilizzabile, ma in alcuni casi può invece essere determinante per sbrogliare
situazioni intricate e di difficile soluzione.
In alcuni contesti può risultare troppo gravoso scrivere a priori delle
subroutine per svolgere determinati compiti, oppure una subroutine molto
generale può risultare poi di fatto troppo lenta; in questi casi può invece
essere utile produrre runtime (al momento dell'esecuzione dello script)
delle subroutine sulla base del contesto in cui ci si trova e farle quindi
eseguire all'interprete mediante la funzione eval.
Riportiamo un esempio elementare che può aiutare a chiarire il funzionamento
di questa potente istruzione. Riprendiamo quindi lo script per il calcolo della
media aritmetica su un insieme di numeri inseriti dall'utente e riscriviamolo
sfruttando la funzione eval:
#!/usr/local/bin/perl
# media_bis.pl
# legge dei valori in input e ne stampa la media aritmetica
sub media {
local($n, $somma, $media);
$media = "(";
$media .= join('+', @_);
$media .= ")/($#_+1)";
return(eval($media));
}
print "Inserisci i numeri:\n";
@numeri = <STDIN>;
chop(@numeri);
$media = &media(@numeri);
print "media = \$media/n";