in reply to Loading arbitrary modules

And, in general, has all the downsides of eval STRING: code injection.
...
Avoids eval STRING horrors.

What is it that's so horrific about string eval? At the bottom of any file inclusion there's eval STRING! Perl has taint mode.

Your third example

(my $filename = $module) =~ s[::][/]g; $filename .= '.pm'; eval { require $filename }; my $obj = $module->new($options);

isn't any bit less frightening, since nothing is done to remove '.' from @INC ...

That said, I a) use the first two forms mostly, the third form only if I have to construct non-standard paths; b) I'm feeling happy with that; c) I'd recommend "that what fits best"[tm] and d) uhm, well, there's TIMTOWDTI, laziness, and such... ;-)