in reply to Freeze @INC?

Is the suggested implementation approach of collecting symlinks in a single tree a reasonable one?

If it helps, why not? :)  In case you have a runnable program, you can dump the values in the %INC hash after all modules have been loaded. Those are the full paths to the actual modules used. Then, simply create a symlinks directory with that particular snapshot of modules, and put it in PERL5LIB (or make it the first/only directory in @INC).

Architecture specific parts would have to go in an auto subdirectory, as usual. To list those, use PERL_DL_DEBUG, e.g.

$ PERL_DL_DEBUG=1 perl -MList::Util -e'print join"\n",sort values %INC +' ... DynaLoader::bootstrap for List::Util (auto/List/Util/Util.so) /usr/lib/perl5/5.8.8/AutoLoader.pm /usr/lib/perl5/5.8.8/Carp.pm /usr/lib/perl5/5.8.8/Exporter.pm /usr/lib/perl5/5.8.8/List/Util.pm /usr/lib/perl5/5.8.8/strict.pm /usr/lib/perl5/5.8.8/vars.pm /usr/lib/perl5/5.8.8/warnings.pm /usr/lib/perl5/5.8.8/warnings/register.pm /usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/Config.pm /usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm /usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/XSLoader.pm