Ich finde, dass hier eigentlich nichts dafür spricht, eine Stringauswertung zu verwenden. Viel sauberer wäre
eval { require Some::Module; };
unless ($@) {
import Some::Module;
}
else {
warn "Couldn't load Some::Module: $@";
}
edit: Wenn man das ganze mehrfach benötigt, könnte man sich auch eine Subroutine dafür schreiben:
sub try2use(*@) {
my $m = shift;
local $_ = $m; s|::|/|g; $_ .= ".pm";
my $r = eval { require };
$m->import(@_) if ($r && !$@);
$r;
}
Dann reduziert sich das optionale Einbinden des Moduls auf das meiner Meinung nach gut verständliche Konstrukt
if (try2use My::Module) {
}
When C++ is your hammer, every problem looks like your thumb.