summaryrefslogtreecommitdiff
path: root/posts/2009-06-22-modules-i-like-getopt-long-and-moosex-getopt.org
diff options
context:
space:
mode:
authorFranck Cuny <franck.cuny@gmail.com>2016-08-10 14:33:04 -0700
committerFranck Cuny <franck.cuny@gmail.com>2016-08-10 20:17:56 -0700
commit8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d (patch)
treea6cecddaaea7e87d901a6c28bebe3a531438f24b /posts/2009-06-22-modules-i-like-getopt-long-and-moosex-getopt.org
parentMerge branch 'convert-to-org' (diff)
downloadlumberjaph-8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d.tar.gz
convert back to md
Diffstat (limited to '')
-rw-r--r--posts/2009-06-22-modules-i-like-getopt-long-and-moosex-getopt.org137
1 files changed, 0 insertions, 137 deletions
diff --git a/posts/2009-06-22-modules-i-like-getopt-long-and-moosex-getopt.org b/posts/2009-06-22-modules-i-like-getopt-long-and-moosex-getopt.org
deleted file mode 100644
index 02b0903..0000000
--- a/posts/2009-06-22-modules-i-like-getopt-long-and-moosex-getopt.org
+++ /dev/null
@@ -1,137 +0,0 @@
-** Getopt::Long
-
-[[http://search.cpan.org/perldoc?Getopt::Long][Getopt::long]] is a
-useful module to parse command line arguements.
-
-A basic usage is something like this:
-
-#+BEGIN_SRC perl
- #!/usr/bin/perl -w
- use strict;
- use YAML::Syck;
- use Getopt::Long;
-
- GetOptions('config=s' => \my $cfg_file,);
-
- my $config = LoadFile $cfg_file
-#+END_SRC
-
-In *GetOptions*, we require a value for config with *config=s*. If we
-wante an integer, we replace 's' with 'i', and for a floating point,
-with 'f'.
-
-Call your script :
-
-#+BEGIN_EXAMPLE
- % script.pl --config=file.yml #this one works
- % script.pl --config file.yml #this one too!
- % script.pl -c file.yml #and this one too
-#+END_EXAMPLE
-
-The three syntaxes are understood.
-
-A good practices is to combine this module with
-[[http://search.cpan.org/perldoc?Pod::Usage][Pod::Usage]]. Let's do some
-modifications on the example:
-
-#+BEGIN_SRC perl
- #!/usr/bin/perl -w
- use strict;
- use YAML::Syck;
- use Getopt::Long;
- use Pod::Usage;
-
- GetOptions('config=s' => \my $cfg_file,) or pod2usage(2);
- pod2usage(2) unless @ARGV > 0;
-
- my $config = LoadFile $cfg_file
-
- __END__
- =head1 NAME
-
- uberscript
-
- =head1 SYNOPSIS
-
- uberscript [options]
-
- Options:
-
- --config config file
-
- =head1 Options
-
- =over 4
-
- =item B<config>
-
- Path to the config file
-#+END_SRC
-
-then
-
-#+BEGIN_EXAMPLE
- % perl uberscript
-
- Usage:
- uberscript [options]
-
- Options:
- --config config file
-#+END_EXAMPLE
-
-From now if we call our script without argument, the POD will be printed
-on STDIN.
-
-** MooseX::Getopt
-
-[[http://search.cpan.org/perldoc?MooseX::Getopt][MooseX::Getopt]] is a
-Role that add a =new_with_options= to your object. We create a basic
-Object :
-
-#+BEGIN_SRC perl
- package OurShinyObject;
-
- use Moose;
- with qw/MooseX::Getopt/;
-
- has 'config' => (isa => 'Str', is => 'ro', required => 1);
- has 'context' => (
- isa => 'HashRef',
- is => 'rw',
- lazy => 1,
- traits => ['NoGetopt'],
- default => sub { LoadFile shift->config }
- );
-
- ...
-#+END_SRC
-
-create a script to call this object
-
-#+BEGIN_SRC perl
- #!/usr/bin/perl -w
- use strict;
- use OurShinyObject;
-
- my $obj = OurShinyObject->new_from_options();
-#+END_SRC
-
-#+BEGIN_SRC sh
- % script.pl --config file.yml
-#+END_SRC
-
-The role will set our attribute *context* using the value from the
-argument set on the command line.
-
-The =traits => ['NoGetopt']= indicate that this attributes will be not
-be read from the command line. An alternate way to do this is to prefix
-the attributes with **\_**.
-
-** conclusion (?)
-
-When you write a script, even if you're sure you will never need to have
-more than one argument, or that you never will have to update the code,
-/please/ consider to use of *Getopt::Long* instead of a =shift @ARGV=,
-because we all know that you will at a certain point update this script
-and you will more than one argument :).