en Perl, podemos hacer:uso lib con si pragma en Perl
uso LISTA lib;
para incluir una lista de rutas en @INC. Del mismo modo, podemos hacer:
use if CONDITION, MODULE => ARGUMENTS;
para incluir un módulo condicionalmente.
¿Es posible hacer una mezcla de ambos, algo así como
uso lib Si la condición, LISTA;
para incluir una lista de rutas condicionalmente. Esto no parece funcionar.
Edit: Lo siento, pero todavía no puedo hacerlo funcionar. Así es como lo estoy haciendo, pero no está funcionando. ¿Puedes sugerir por favor lo que está mal?
use Data::Dumper;
BEGIN {
my $env=$ENV{'ENV'};
use if $env eq 'OLD', lib => '/home/vivek/OLD';
use if $env eq 'NEW', lib => '/home/vivek/NEW';
}
print Dumper \@INC;
Su condición debe resolverse en tiempo de compilación. – tchrist
Veo que funciona si en lugar de asignar $ ENV {'ENV'} a una variable y luego usarla, en su lugar, uso $ ENV {'ENV'} directamente. Pero no se puede calcular $ env en el bloque BEGIN. – Vivek
Su ejemplo no funcionará. La asignación 'my $ env = ...' se ejecutará después de 'use if'. El 'uso si' va primero. Tendría que tener un bloque 'BEGIN' totalmente cerrado que se asignara a una variable que no sea mi, y luego fuera y debajo de ese bloque, tenga su' uso si' que involucra dicha variable. – tchrist