#! /usr/bin/perl

package with_fallback;

sub import {
    use File::Basename;
    use File::Spec::Functions;
    foreach (@_) {
	eval "require $_";
	if ($@) {
	    unshift @INC, catdir(dirname(__FILE__), "..", "external", "perl");
	    my $transfer = "transfer::$_";
	    eval "require $transfer";
	    shift @INC;
	    warn $@ if $@;
	}
    }
}
1;

Refactor file writing - arrange for use of bundled Perl modules as fallback
Refactor file writing - arrange for use of bundled Perl modules as fallback

For our own convenience, we need a mechanism to be able to fall back
on bundled Perl modules.  It's a minimal package that's called like
this:

    use with_fallback qw(Module1 Module2 ...);

For each module, it will try to require them from the system
installation, and failing that, it will temporarly add external/perl
and try to require transfer::{ModuleName}.  It requires that each
bundled Perl modules is accompanied by a small transfer module
(external/perl/transfer/ModuleName.pm in our example) that knows
exactly what to load.

Reviewed-by: Rich Salz <c04971a99e5a9ee80eaab4b1deb37e845b0bd697@openssl.org>
