如何使用Getopt :: Std设置默认值?

时间:2009-10-22 18:16:30

标签: perl getopt

我正在尝试使用Perl脚本中的Getopt::Std从命令行收集值。

use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
getopts('i:o:p:');
my $inputfile = our $opt_i;
my $outputfile = our $opt_o;
my $parameter_value = our $opt_p;

这里前两个变量($ inputfile,$ outputfile)是必需的,但最后一个变量($ parameter_value)是可选的,可以忽略。

当我在命令行忽略-p标志时,我试图默认将一些值设置为最后一个变量($ parameter_value)。

我试过用这个:

my $parameter_value = our $opt_p || "20";

这里在命令行忽略-p标志时传递正确的值。但问题是当我从命令行提供一些值时(例如-p 58),相同的值20被传递给程序而不是我从命令行传递的58.

请指出我在这里犯的错误,请帮助我吗?

谢谢。

4 个答案:

答案 0 :(得分:17)

最好的方法是使用GetOpt::Long并使用哈希而不是单个变量。 然后,您可以通过预先填充数组

来传递默认值
    use Getopt::Long;
    my %opts = (parameter => 20);
    GetOptions( \%opts, 
            'p|parameter=i', 
            'o|outputfile=s',
            'i|inputfile=s'
    ) or die "Invalid parameters!";

    # I didn't bother cloning STANDARD_HELP_VERSION = 1;

答案 1 :(得分:16)

#/usr/bin/perl

use strict;
use warnings;

use Getopt::Std;

getopts('i:o:p:');
our($opt_i, $opt_o, $opt_p);

my $inputfile = $opt_i;
my $outputfile = $opt_o;
my $parameter_value = $opt_p || "20";

print "$_\n" for $inputfile, $outputfile, $parameter_value;
C:\Temp> ks -iinput -ooutput -p55
input
output
55
C:\Temp> ks -iinput -ooutput
input
output
20

答案 2 :(得分:1)

我建议在调用getopts之前将opt变量设置为默认值。此外,您可以在使用消息中使用$ opt_变量来显示默认值。

use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
our $opt_p = 20;
sub HELP_MESSAGE { print " -p  parameter value (default $opt_p)\n"; }
getopts('i:o:p:');
my $inputfile = our $opt_i;
my $outputfile = our $opt_o;
my $parameter_value = our $opt_p;

答案 3 :(得分:0)

#/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;

$Getopt::Std::STANDARD_HELP_VERSION = 1;

my %opts = ();
getopts('i:o:p:', \%opts);
my $inputfile = $opts{i};
my $outputfile = $opts{o};
my $parameter_value = $opts{p} || "20";
print "$inputfile, $outputfile, $parameter_value\n";