allow for has configfile => ( init_arg => 0 )
[gitmo/MooseX-Getopt.git] / lib / MooseX / Getopt / Basic.pm
index 808ff18..9c7e8f7 100644 (file)
@@ -7,12 +7,13 @@ use MooseX::Getopt::OptionTypeMap;
 use MooseX::Getopt::Meta::Attribute;
 use MooseX::Getopt::Meta::Attribute::NoGetopt;
 use MooseX::Getopt::ProcessedArgv;
+use Try::Tiny;
 use Carp ();
 
 use Getopt::Long 2.37 ();
 
-has ARGV       => (is => 'rw', isa => 'ArrayRef', metaclass => "NoGetopt");
-has extra_argv => (is => 'rw', isa => 'ArrayRef', metaclass => "NoGetopt");
+has ARGV       => (is => 'rw', isa => 'ArrayRef', traits => ['NoGetopt']);
+has extra_argv => (is => 'rw', isa => 'ArrayRef', traits => ['NoGetopt']);
 
 sub process_argv {
     my ($class, @params) = @_;
@@ -35,7 +36,7 @@ sub process_argv {
         if (!defined $configfile)
         {
             my $key = $cfmeta->init_arg;
-            $configfile = $constructor_params->{$key} if $key;
+            $configfile = $constructor_params->{$key} if defined $key;
         }
 
         if(!defined $configfile) {
@@ -46,12 +47,12 @@ sub process_argv {
                 $configfile = &$configfile($class);
             }
             if (defined $configfile) {
-                $config_from_file = eval {
+                $config_from_file = try {
                     $class->get_config_from_file($configfile);
-                };
-                if ($@) {
-                    die $@ unless $@ =~ /Specified configfile '\Q$configfile\E' does not exist/;
                 }
+                catch {
+                    die $_ unless /Specified configfile '\Q$configfile\E' does not exist/;
+                };
             }
         }
         else {
@@ -73,7 +74,7 @@ sub process_argv {
 
     # did the user request usage information?
     if ( $processed{usage} and $params->{help_flag} ) {
-        $class->_getopt_full_usage($processed{usage});
+        $class->print_usage_text($processed{usage});
     }
 
     return MooseX::Getopt::ProcessedArgv->new(
@@ -112,14 +113,16 @@ sub _parse_argv {
     my $argv_copy = [ @ARGV ];
 
     my @warnings;
-    my ( $parsed_options, $usage ) = eval {
+    my ( $parsed_options, $usage ) = try {
         local $SIG{__WARN__} = sub { push @warnings, @_ };
 
         return $class->_getopt_get_options(\%params, $opt_spec);
+    }
+    catch {
+        $class->_getopt_spec_exception(\@warnings, $_);
     };
 
     $class->_getopt_spec_warnings(@warnings) if @warnings;
-    $class->_getopt_spec_exception(\@warnings, $@) if $@;
 
     # Get a copy of the Getopt::Long-mangled @ARGV
     my $argv_mangled = [ @ARGV ];
@@ -152,11 +155,18 @@ sub _getopt_spec_exception {
     die @$warnings, $exception;
 }
 
-sub _getopt_full_usage {
+# maintained for backwards compatibility only
+sub _getopt_full_usage
+{
     my ($self, $usage) = @_;
     print $usage->text;
     exit 0;
 }
+#(this is already documented in MooseX::Getopt. But FIXME later, via RT#82195)
+=for Pod::Coverage
+    print_usage_text
+=cut
+sub print_usage_text { shift->_getopt_full_usage(@_) }
 
 sub _usage_format {
     return "usage: %c %o";
@@ -286,6 +296,6 @@ See L<MooseX::Getopt/new_with_options>.
 
 =method process_argv
 
-See L<MooseX::Getopt/process_agv>.
+See L<MooseX::Getopt/process_argv>.
 
 =cut