in reply to 'switch' and 'smartmatch' features deprecated in 5.38

Like ikegami, I recommend Getopt::Long. I also recommend combining it with Pod::Usage. It results in very little boilerplate for a very robust and extensible design.

use Pod::Usage; use Getopt::Long; Getopt::Long::Parser->new(config => ['gnu_getopt']) ->getoptions( 'help|h' => sub { pod2usage(1) }, 'man' => sub { pod2usage(-exitval => 1, -verbose => 2) }, 'verbose|v' => \my $verbose, 'force|f' => \my $force, 'table=s' => \my $table, ) or pod2usage(2);

Give it a try.

Replies are listed 'Best First'.
Re^2: 'switch' and 'smartmatch' features deprecated in 5.38
by soonix (Chancellor) on Jun 27, 2023 at 07:10 UTC

      Well, not exactly preaching to the choir if ibm1620 wasn't using Getopt::Long and ikegami didn't mention Pod::Usage. But, I know I'm not the first to suggest it of course.

      Then, there's the other faction who insist that MooseX::(something) should be used to automatically generate the commandline options. I've experimented with those and found them lacking, because command lines are inherently a thing meant to be human-friendly and I always seem to want to add some special case that the MooX::... and MooseX::... modules can't support. Getopt::Long has always given me the tools I needed to get that done. So, after lots of experimentation, I always come back to Getopt::Long and Pod::Usage. I basically consider the pair to be the only right way to start a perl script.