Locale::gettext is not a pure Perl module (parts of it are written in C) so is not portable between different versions of Perl. Perl 5.18 (which you are using) can't load a copy of the module that was compiled for Perl 5.16. In general, it's not usually a good idea to share a library directory between multiple versions of Perl.
Take the 5.16-specific path out of PERL5LIB. (And you probably want to look at why /Library/Perl/5.12 is there too!) Then install this module afresh into one of Perl 5.18's library directories.