explorer escribiste:Creo que no, que no se puede cargar un módulo indicando un parámetro.
¡Si, si se puede!
El código...
Using perl Syntax Highlighting
use Foo
'bar', 'doz';Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
es equivalente a...
Using perl Syntax Highlighting
BEGIN {
require Foo
;
Foo
->import('bar', 'doz');
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La mayoría de los módulos, lo que hacen es importar el método
import del módulo
Exporter que al ejecutarse enlaza en el
package que ha hecho el
use las subrutinas con los nombres que se han pasado como argumentos.
Pero en realidad nada nos impide declarar nuestro propio método
import que haga lo que nosotros queramos. Por ejemplo:
Using perl Syntax Highlighting
package Foo
;
sub import {
my $class = shift;
print "$class->import(", join(" ", @_), ")\n";
};Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
De todas formas, esto de pasar parámetros en el
use, no suele ser una buena idea, porque nos obliga a tener los parámetros disponibles en tiempo de compilación.
Por ejemplo:
Using perl Syntax Highlighting
my $param = foo_param
();
use Foo
$param;Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
No va a hacer lo que esperaríamos a primera vista porque si consideramos cómo se expande el
use y como el
BEGIN se ejecuta nada más ser compilado, el resultado sería equivalente a...
Using perl Syntax Highlighting
my $param;
require Foo
;
Foo
->import($param);
$param = foo_param
();Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Así que aunque sí se pueda, en general ¡es mejor utilizar la solución que tu propones!