Как я могу установить значения по умолчанию, используя Getopt :: Std? - PullRequest
10 голосов
/ 22 октября 2009

Я пытаюсь собрать значения из командной строки, используя Getopt :: Std в моем скрипте Perl.

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) является необязательной и может игнорироваться.

Я пытаюсь установить некоторое значение по умолчанию для последней переменной ($ parameter_value), когда в командной строке игнорируется флаг -p.

Я пытался использовать это:

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

Здесь он передает правильное значение, когда флаг -p игнорируется в командной строке. Но проблема в том, что когда я предоставляю какое-то значение из командной строки (например, -p 58), в программу передается то же значение 20, а не 58, которое я передавал из командной строки.

Не могли бы вы помочь мне, указав на ошибки, которые я здесь делаю?

Спасибо.

Ответы [ 4 ]

17 голосов
/ 22 октября 2009

Лучше всего использовать 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;
16 голосов
/ 22 октября 2009
#/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
1 голос
/ 08 августа 2013

Я предлагаю установить переменные opt по умолчанию перед вызовом getopts. Кроме того, вы можете использовать переменные $ 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;
0 голосов
/ 17 февраля 2016
#/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";
...