The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Mention Module::Install::PodFromEuclid


Revisit --podfile so that the module does not have to be loaded, because some
of the dependencies might not have been installed yet and the --podile operation
will crash:
   $ perl -I /home/floflooo/Software/bioperl/Bio-Community/lib Makefile.PL 
   [...]
   Can't locate Bio/Community/IO.pm in @INC
   BEGIN failed--compilation aborted at scripts/copyrighter line 101.
   System call to '/usr/bin/perl -Ilib scripts/copyrighter --podfile' failed:


This hangs:
   perl -I /home/floflooo/Software/bioperl/Bio-Community/lib ./bp_community_bootstrap.pl -if otu_table_greengenes_suzuki_vs_mobio.txt.qiime -sample_size 1000 -nr 1000
But this works:
   perl -I /home/floflooo/Software/bioperl/Bio-Community/lib ./bp_community_bootstrap.pl -if otu_table_greengenes_suzuki_vs_mobio.txt.qiime -sample_size 1000 -nr 1001

Warn if Getopt::Euclid is use()'d but the optional argument and required argument sections are missing


=item -ql <qual_levels>... | -qual_levels <qual_levels>...
Generate basic quality scores for the simulated reads. Good residues are given a
specified good score (e.g. 30) and residues that are the result of an insertion
or substitution are given a specified bad score (e.g. 10). Specify first the
good score and then the bad score on the command-line, e.g.: 30 10. Default:
qual_levels.default
=for Euclid:
   qual_levels.type: 0+integer
   qual_levels.default: [ ]


Need to make sure that default reported is something like '' or "" or [] and not some blank value


Compatiblity notes:
   when using the pp (perl packer) utility to produce binary files, use
      * the PAR_VERBATIM=1 environment variable to ensure that POD is not stripped:
      * --compress = 0 to prevent POD from being unreadable
      * --clean
   export PAR_VERBATIM=1 && pp --compress 0 ...


Problem with this:
=item -mo <mate_orientation> | -mate_orientation <mate_orientation>
When generating paired-end or mate-pair reads (see <insert_dist>), specify the
orientation of the reads (F: forward, R: reverse): FR, FF, RF, RR
=for Euclid:
   mate_orientation.type: string, mate_orientation =~ m/^[FR]{2}$/
That's the regexp I need, but I get problems with Getopt::Euclid:
perl -Ilib ./script/grinder -reference_file ../test-db.fa -unidirectional 0 -read_dist 80 -insert_dist 240 -total_reads 10 -mate_orientation FRR
Use of uninitialized value $var_val in substitution (s///) at /usr/local/share/perl/5.12.4/Getopt/Euclid.pm line 652.
Use of uninitialized value $main:: in regexp compilation at (eval 89) line 1.


Have new directive: use Getopt::Euclid qw( :placeholder_keys )
instead of
%ARGS = (
   -s
        h
        w
   --size
        h
        w
)
:placeholder keys gives:
%ARGS = (
   <h>
   <w>
)
and in :minimalist_keys, it gives
%ARGS = (
   h
   w
)


in pod, have example of default for a list of values:

=item -mr <mutation_ratio>... | -mutation_ratio <mutation_ratio>...

Indicate the percentage of substitutions and the number of indels.
=for Euclid:
   mutation_ratio.type: num, mutation_ratio >= 0
   mutation_ratio.default: [80, 20]


1/ Having subheadings (=headX) inside a REQUIRED ARGUMENTS or OPTIONS section breaks
Getopt::Euclid. Example:
   =head1 OPTIONS
   =head2 Input files
   =over
   =item -f <fasta_file>
This may possibly require using a module (POD::Parser) that understands the POD
document hierarchy


2/ Decorations for REQUIRED ARGUMENTS and OPTIONS are put in man(), but not in help()
Example:
   =head1 OPTIONS
   Input files
   =over
   =item -f <fasta_file>
Maybe, I need to implement a new specifier: use Getopt::Euclid qw( :help_decoration );


3/ Use POD::Constants so that default values are exported in README
Or see alternate solution: http://stackoverflow.com/questions/2521188/how-can-i-use-macros-in-perl


4/ Need a way to know whether an option was used by a user, or just if its default
was setup. In object that is returned, have elements called {is_default} and
{is_opt_default}


use TT::Template that are customizable for messages.


implement a 'requires' attribute for argument that can only be specified when another one has been specified


required arguments cannot have defaults


merge required and optional arguments


when an argument is unknown, specify explicitly which one was not recognized.
At the moment, we get "Unknown argument: --alpha aaa --beta 999 --gamma 0 --delta asdf"