Как установить значения по умолчанию с помощью Getopt:: Std?
Я пытаюсь собрать значения из командной строки, используя Getopt:: Std в моем Perl script.
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, которое я передал из командной строки.
Не могли бы вы помочь мне, указав ошибки, которые я здесь делаю?
Спасибо.
Ответы
Ответ 1
#/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
Лучше всего использовать 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;
Ответ 3
Я предлагаю установить переменные 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;
Ответ 4
#/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";