Sto trovando molto comodo per passare la configurazione e altri dati che vengono letti o calcolati una volta, ma poi utilizzati più volte in un programma utilizzando il meccanismo use
di Perl. Lo sto facendo esportando un hash nello spazio dei nomi del chiamante. Per esempio:È buona pratica esportare variabili in Perl?
package Myconfiguration;
my %config;
sub import {
my $callpkg = caller(0);
my $expsym = $_[1];
configure() unless %config;
*{"$callpkg\::$expsym"} = \%config;
}
e poi in altri moduli:
use MyConfiguration (loc_config_sym);
if ($loc_config_sym{paramater}) {
# ... do stuff ...
}
Tuttavia, non sono sicuro di questo come una best practice. È meglio aggiungere un metodo che restituisca un hash ref con i dati? Qualcos'altro?
Questo è ciò che la scimmia nella mia testa stava cercando di dirmi, ma non ho potuto uscire (anche se preferisco 'usare Exporter qw (import);' :)). Non ho davvero pensato a questo come una variabile globale quando in pratica è esattamente quello che sto facendo qui. L'unico svantaggio è il sovraccarico della chiamata al metodo, ma non è probabile che sia importante, soprattutto considerando la manutenzione e il debug. Inoltre, è abbastanza facile alias il sub se è conveniente avere un nome localmente rilevante (non si tratta solo di configurazione). – gvkv
Sono d'accordo che setter e getter sono la strada da percorrere. Ti danno molto più controllo. Ad esempio, puoi controllare il set di valori e fare il calcolo sul valore ottenuto. – Bill