Mail::SpamAssassin::Util - utility functions
A general class for utility functions. Please use this for functions that stand alone, without requiring a $self object, Portability functions especially.
NOTE: The functions in this module are to be considered private. Their API may change at any point, and it's expected that they'll only be used by other Mail::SpamAssassin modules. (TODO: we should probably revisit this if it's useful for plugin development.)
require from the list.  Returns undef if none are available.
This is used instead of AnyDBM_File as follows:
  my $module = Mail::SpamAssassin::Util::first_available_module
                        (qw(DB_File GDBM_File NDBM_File SDBM_File));
  tie %hash, $module, $path, [... args];
Note that SDBM_File is guaranteed to be present, since it comes
with Perl.
If it cannot open a file after 20 tries, it returns undef.
If it cannot create a directory after 20 tries, it returns undef.