diff options
author | Steven Schubiger <stsc@refcnt.org> | 2015-01-03 18:32:29 +0100 |
---|---|---|
committer | Steven Schubiger <stsc@refcnt.org> | 2015-01-03 18:32:29 +0100 |
commit | 259a08fb7474636756c48f96bcfe60c015e86d63 (patch) | |
tree | 04df5d59053cb307ae7d75d4739bd45ac1b0b211 | |
parent | 2eeaf2830b8ec5df9a50488d58993275f9ef1387 (diff) | |
download | distdns-259a08fb7474636756c48f96bcfe60c015e86d63.tar.gz distdns-259a08fb7474636756c48f96bcfe60c015e86d63.tar.bz2 |
Trap module inclusion/import failures
-rwxr-xr-x | client.pl | 50 |
1 files changed, 36 insertions, 14 deletions
@@ -1,6 +1,6 @@ #!/usr/bin/perl # -# Copyright (c) 2013 Michel Ketterle, Steven Schubiger +# Copyright (c) 2015 Michel Ketterle, Steven Schubiger # # This file is part of distdns. # @@ -21,19 +21,41 @@ use strict; use warnings; use constant false => 0; -use Config::Tiny; -use Digest::MD5 qw(md5_hex); -use Fcntl ':flock'; -use File::Spec::Functions qw(catfile rel2abs); -use FindBin qw($Bin); -use Getopt::Long qw(:config no_auto_abbrev no_ignore_case); -use JSON qw(decode_json); -use LWP::UserAgent; -use POSIX qw(strftime); -use Sys::Hostname qw(hostname); -use Tie::File; - -my $VERSION = '0.06'; +BEGIN +{ + my @modules = ( + [ 'Config::Tiny', [ ] ], + [ 'Digest::MD5', [ qw(md5_hex) ] ], + [ 'Fcntl', [ qw(:flock) ] ], + [ 'File::Spec::Functions', [ qw(catfile rel2abs) ] ], + [ 'FindBin', [ qw($Bin) ] ], + [ 'Getopt::Long', [ qw(:config no_auto_abbrev no_ignore_case) ] ], + [ 'JSON', [ qw(decode_json) ] ], + [ 'LWP::UserAgent', [ ] ], + [ 'POSIX', [ qw(strftime) ] ], + [ 'Sys::Hostname', [ qw(hostname) ] ], + [ 'Tie::File', [ ] ], + ); + my (@missing, @import); + foreach my $module (@modules) { + unless (eval "require $module->[0]; 1") { + push @missing, $module->[0]; + next; + } + unless (eval { $module->[0]->import(@{$module->[1]}); 1 }) { + push @import, $module->[0]; + } + } + if (@missing || @import) { + warn <<"EOT"; +Modules missing: @missing +Import failures: @import +EOT + exit 1; + } +} + +my $VERSION = '0.07'; my $conf_file = catfile($Bin, 'client.conf'); |