[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