I used local::lib on a cross platform project about 6 months ago, where the contents of that lib directory where checked into subversion along with the main project source code, scripts etc.

In the main it worked well, but there where occasions where perl packages that compiled binary XS code would break things quite comprehensively for other platforms, while appearing to work fine for the platform I compiled an tested on.

In a typical scenario, In my development (on Linux x86_64), I decided that I needed package X from CPAN, so I would start the CPAN tool and install it into the local lib directory of my subversion checkout. CPAN would follow dependences and also install package Y which was an XS module. The install would appear to work fine. Once I finished my development and all the unit tests passed, I checked the code back into the trunk.

Shortly after another developer who works on windows (i686) would update to the latest head, and discover that everything was broken because the binary portions of package Y where missing.

Best case scenario he would be forced to stop what he was doing and start CPAN to re-install package Y. On one occasion we managed to break things so badly that local::lib would not work at all under windows, and we had to revert the whole change and start again.

The work around we came up with was to create three branches from trunk (n+1 where n is the number of supported platforms). We would then do the CPAN install into the local lib using a VM checked out on each supported platform on a different clean branch. All the branches where then merged into the staging branch that contained the binary XS code for all platforms. That was then unit tested on all platforms before being merged back into the trunk.