(contributo di brian d foy)
Questo è documentato in perlref e sebbene non sia la cosa
piè semplice da leggere, funziona davvero. In ognuno di questi
esempi, chiamiamo la funzione all'interno delle parentesi utilizzate
per deferenziare un riferimento. Se abbiamo più di un valore
restituito, possiamo costruire e deferenziare un array anonimo. In
questo caso, chiamiamo la funzione in contesto di lista.
print "I valori dell'istante di tempo sono @{ [localtime] }.\n";
Se vogliamo chiamare la funzione in contesto scalare, dobbiamo fare un po'
più di lavoro. All'interno delle parentesi possiamo avere davvero
qualsiasi tipo di codice, dunque si deve semplicemente terminare con
il riferimento scalare, sebbene come questo si debba fare sia lasciato
a voi, e potete usare del codice all'interno delle parentesi.
print "L'istante di tempo e` ${\(scalar localtime)}.\n"
print "L'istante di tempo e` ${ my $x = localtime; \$x }.\n";
Se la vostra funzione restituisce già un riferimento, non è
necessario che vi creiate il riferimento.
sub marcatemporale { my $t = localtime; \$t }
print "L'istante di tempo e` ${ marcatemporale() }.\n";
Anche il modulo Interpolation può fare un sacco di cose magiche per voi.
Potete specificare il nome di una variabile, in questo caso E, per impostare
un hash sottoposto a tie che vi faccia l'interpolazione. Possiede anche diversi
altri metodi per farlo.
use Interpolation E => 'eval';
print "I valori dell'istante di tempo sono $E{localtime()}.\n";
Nella maggior parte dei casi, è probabilmente più semplice
utilizzare la concatenazione di stringhe, che inoltre forza un contesto scalare.
print "L'istante di tempo e` " . localtime . ".\n";
|