Salut,
Cas1
#!/usr/bin/perl
use strict;use warnings;
our $toto;
BEGIN {
$toto = 0;
print "avant $toto\n";
unless (eval "require Date::Calc") {
$toto = 1;
warn "***le module Date ne peut pas être chargé***\n";
}
print "après $toto\n";
}
if ($toto != 1) {use Date::Calc qw(:all);}
print "ok, je continue\n"
__END__
Exécutionlami20j@debian:~/trash$ perl ccm.pl
avant 0
***le module Date ne peut pas être chargé***
après 1
Can't locate Date/Calc.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl /usr/local/lib/perl/5.8.4 /usr/local/share/perl/5.8.4 .) at ccm.pl line 13.
BEGIN failed--compilation aborted at ccm.pl line 13.
Explication
C'est normal d'avoir toujours le message d'erreur
use charge le module à la compilation et pas à l'exécution, donc même si ta variable de teste change le compilateur s'en fiche complètement.
Cas2
#!/usr/bin/perl
use strict;use warnings;
our $toto;
BEGIN {
$toto = 0;
print "avant $toto\n";
unless (eval "use Date::Calc") {
$toto = 1;
warn "***le module Date ne peut pas être chargé***\n";
}
print "après $toto\n";
}
print "ok, je continue\n"
__END__
_
Exécutionlami20j@debian:~/trash$ perl ccm.pl
avant 0
***le module Date ne peut pas être chargé***
après 1
ok, je continue
Explication
La variable $toto ne sers à rien, c'est juste pour te montrer qu'elle change.
Si eval réussi alors le module est chargé sinon un message de warning est affiché et le script continue