Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Parsing commandline with subcommands

by eserte (Deacon)
on Sep 18, 2015 at 15:17 UTC ( [id://1142437]=note: print w/replies, xml ) Need Help??


in reply to Parsing commandline with subcommands

Getopt::Long's argument callback feature ("<>") may help here. The idea is to call GetOptions twice: first time with the global options, and to stop on the first unrecognized non-option. This one may be an invalid global option, or a subcmd, either valid or invalid. After this, call GetOptions again with the remaining arguments which would all be subcmd options.
#!/usr/bin/perl use strict; use Getopt::Long; my $subcmd; my $global_option; my $subcmd_option; GetOptions("global" => \$global_option, "<>" => sub { my($arg) = @_; if ($arg =~ m{^-}) { die "usage error: unhandled option $arg detected in + global option section"; } elsif ($arg !~ m{^(subcmd1|subcmd2)$}) { die "usage error: invalid subcommand $arg"; } else { $subcmd = $arg; die "!FINISH"; } }) or die "usage error (in global option section)"; GetOptions("subcmd" => \$subcmd_option) or die "usage error (in subcmd option section)"; print <<EOF; global_option: $global_option subcmd: $subcmd subcmd_option: $subcmd_option leftover: @ARGV EOF __END__

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1142437]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (2)
As of 2026-04-13 02:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.