11/11/2014
perl - How to use Getopt::Long method? - Stack Overflow
sign up
log in
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no
registration required.
tour
help
stack overflow careers
Take the 2-minute tour
How to use Getopt::Long method?
How can I use Getopt::Long method if the input command execution is like this:
$ testcmd -option check
ARG1 ARG2 ARG3
or
$ testcmd
perl
ARG1 ARG2 ARG3
getopt-long
edited Jun 30 '10 at 16:14
Ether
34.8k 9 51 122
asked Jun 30 '10 at 11:04
Tree
1,397 7 36 63
That depends on what you want to have done with those options and flags. The people who answer below are
trying to make their best guess, but mind-reading is a difficult skill to master. Ether Jun 30 '10 at 16:15
add a comment
3 Answers
A quick example:
#! /usr/bin/perl
use warnings;
use strict;
use Getopt::Long;
sub usage { "Usage: $0 [--option=VALUE] ARG1 ARG2 ARG3\n" }
my $option = "default";
GetOptions("option=s", \$option)
or die usage;
die usage unless @ARGV == 3;
print "$0: option=$option: @ARGV\n";
Getopt::Long is quite flexible in what it will accept:
http://stackoverflow.com/questions/3148574/how-to-use-getoptlong-method
1/3
11/11/2014
perl - How to use Getopt::Long method? - Stack Overflow
$ ./cmd
Usage: ./cmd [--option=VALUE] ARG1 ARG2 ARG3
$ ./cmd 1 2 3
./cmd: option=default: 1 2 3
$ ./cmd --option=foo 4 5 6
./cmd: option=foo: 4 5 6
$ ./cmd -option=bar 7 8 9
./cmd: option=bar: 7 8 9
$ ./cmd -option check a b c
./cmd: option=check: a b c
edited Jun 30 '10 at 11:38
answered Jun 30 '10 at 11:11
Greg Bacon
53.5k 11 111 175
add a comment
You need to enable the pass_through option. Documentation quoted below:
pass_through (default: disabled)
Options that are unknown, ambiguous or supplied with an invalid option value are passed through in
@ARGV instead of being flagged as errors. This makes it possible to write wrapper scripts that
process only part of the user supplied command line arguments, and pass the remaining options to
some other program.
If require_order is enabled, options processing will terminate at the first unrecognized option, or
non-option, whichever comes first. However, if permute is enabled instead, results can become
confusing.
DVK's posted an example of how to do this in another answer. I'd upvote his answer first if you find it
useful.
edited Jun 30 '10 at 11:19
answered Jun 30 '10 at 11:12
Zaid
21.5k 6 44 99
+1 for recognizing that values starting with "-" need to be passed through DVK Jun 30 '10 at 13:28
add a comment
http://stackoverflow.com/questions/3148574/how-to-use-getoptlong-method
2/3
11/11/2014
perl - How to use Getopt::Long method? - Stack Overflow
#!/usr/bin/perl
use Getopt::Long;
my $cla = GetOptions (
"one=s"
"two=s"
"three=s"
"help|h|?"
=>
=>
=>
=>
\$one,
\$two,
\$three,
\$help,
) or usage ();
if ($help) {
usage ();
}
my $first = $one;
my $second = $two;
my $third = $three;
printf ("%-7s %-9s %-7s\n", $first, $second, $third);
sub usage {
print "\n$0\t" . "[ -one <text> -two <text> -three <text> ]\n\n";
exit (0);
}
answered Nov 3 '13 at 2:52
Rukmangathan
1
Maybe you should add some sort of explanation to your code so it can be more useful. Meryovi Nov 3 '13 at
14:25
add a comment
Not the answer you're looking for? Browse other questions tagged perl getopt-long or
ask your own question.
http://stackoverflow.com/questions/3148574/how-to-use-getoptlong-method
3/3