[Roma.pm] Prototipi e riferimenti
Flavio Poletti
flavio at polettix.it
Thu Aug 7 06:32:03 PDT 2008
> Ma infatti il prototipo che ho usato non è (\$$), bensì (\[$%]$) :-P
>
> E il dubbio quindi è: se sto passando uno scalare che è un riferimento
> ad hash, con quel prototype lo accetta come \% oppure lo considera
> come \$ e quindi un riferimento a riferimento ad hash?
Che io sappia, quando nel prototipo specifichi \% vuol dire che dovrai
passare una hash, non un riferimento:
proto(%una_hash);
Se passi uno scalare che contiene un riferimento ad hash ricadi nel caso
dell'esempio che avevo incluso nell'email precedente. Ergo: nel tuo caso,
puoi risparmiarti un po' di "line noise" e mettere semplicemente \$
> E ancora: farebbe differenza (\[%$]$) rispetto a (\[$%]$) ?
Anche no!
Citando l'OTTIMA traduzione di perlsub:
Ogni carattere di prototipo preceduto da una barra inversa [ossia la
backslash ``\'', N.d.T.] impone che il parametro reale debba iniziare con
quel carattere. Il valore passato in @_ sarà dunque un riferimento al
parametro reale passato nella chiamata alla subroutine, ottenuto cioè
applicando \ all'argomento.
Potete anche imporre la backslash a molti argomenti contemporaneamente,
utilizzando la notazione \[]:
sub mio_rif (\[$@%&*])
che vi consente di chiamare mio_rif() come segue:
mio_rif $var
mio_rif @array
mio_rif %hash
mio_rif &sub
mio_rif *glob
ed il primo argomento di mio_rif() sarà un riferimento ad uno scalare, un
array, una hash, un pezzo di codice o un glob.
More information about the Roma
mailing list