1package Crypt::SSLeay::MainContext; 2 3# maintains a single instance of the Crypt::SSLeay::CTX class 4 5use strict; 6use Carp (); 7 8require Crypt::SSLeay::CTX; 9 10my $ctx = &main_ctx(); 11 12sub main_ctx { 13 my $ssl_version = shift || 23; 14 15 my $ctx = Crypt::SSLeay::CTX->new($ssl_version); 16 $ctx->set_cipher_list($ENV{CRYPT_SSLEAY_CIPHER}) 17 if $ENV{CRYPT_SSLEAY_CIPHER}; 18 19 $ctx; 20} 21 22my %sub_cache = ('main_ctx' => \&main_ctx ); 23 24sub import { 25 my $pkg = shift; 26 my $callpkg = caller(); 27 my @func = @_; 28 for (@func) { 29 s/^&//; 30 Carp::croak("Can't export $_ from $pkg") if /\W/;; 31 my $sub = $sub_cache{$_}; 32 unless ($sub) { 33 my $method = $_; 34 $method =~ s/^main_ctx_//; # optional prefix 35 $sub = $sub_cache{$_} = sub { $ctx->$method(@_) }; 36 } 37 no strict 'refs'; 38 *{"${callpkg}::$_"} = $sub; 39 } 40} 41 421; 43