Me resulta muy conveniente pasar la configuración y otros datos que se leen o calculan una vez, pero luego se usan muchas veces en un programa utilizando el mecanismo use
de Perl. Estoy haciendo esto exportando un hash al espacio de nombres de la persona que llama. Por ejemplo:¿Es una buena práctica exportar variables en Perl?
package Myconfiguration;
my %config;
sub import {
my $callpkg = caller(0);
my $expsym = $_[1];
configure() unless %config;
*{"$callpkg\::$expsym"} = \%config;
}
y luego en otros módulos:
use MyConfiguration (loc_config_sym);
if ($loc_config_sym{paramater}) {
# ... do stuff ...
}
Sin embargo, no estoy seguro de esto como una buena práctica. ¿Es mejor agregar un método que devuelva una referencia hash con los datos? ¿Algo más?
Esto es lo que el mono dentro de mi cabeza estaba tratando de decirme pero no pude salir (aunque prefiero usar Exporter qw (import); ':)). Realmente no pensé en esto como una variable global cuando en la práctica eso es exactamente lo que estoy haciendo aquí. El único inconveniente aquí es la sobrecarga de llamada al método, pero eso probablemente no sea importante, especialmente teniendo en cuenta el mantenimiento y la depuración. Además, es bastante fácil alias el sub si es conveniente tener un nombre localmente relevante (esto no es solo acerca de la configuración). – gvkv
Estoy de acuerdo en que setters y getters son el camino a seguir. Te dan mucho más control. Por ejemplo, puede hacer comprobaciones en el conjunto de valores y hacer cálculos en el valor obtenido. – Bill