Wie kann ich Werte Standard Getopt :: Std verwenden?
Frage
Ich versuche, die Werte von der Kommandozeile sammeln mit Getopt :: Std mein Perl-Skript.
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;
Hier die ersten beiden Variablen ($ Eingabedatei, $ output) sind obligatorisch, aber die letzte Variable ($ parameter_value) ist optional und kann ignoriert werden.
Ich versuche, einen Wert standardmäßig auf die letzte Variable ($ parameter_value) einzustellen, wenn die -p
Flagge in der Befehlszeile ignoriert wird.
Ich habe versucht, mit dieser:
my $parameter_value = our $opt_p || "20";
Hier seine Pässe den richtigen Wert, wenn -p Flag auf der Kommandozeile wird ignoriert. Aber das Problem ist, wenn ich einen Wert von der Kommandozeile an Bereitstellung (zB -p 58), der gleiche Wert 20 wird an das Programm übergibt statt 58, die ich von der Kommandozeile übergeben.
Können Sie mir bitte helfen, indem die Fehler zeigen ich hier mache?
Danke.
Lösung
#/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
Andere Tipps
Das Beste ist, getopt :: Long und verwenden Sie einen Hash statt einzelne Variablen. Dann können Sie die Standardwerte durch Pre-bevölkern das Array übergeben
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;
Ich schlage vor, die Opt-Variablen auf Standardwerte Einstellung vor getopts zu rufen. Darüber hinaus können Sie dann die $ opt_ Variablen in Ihrer Nutzungs Nachricht verwenden, um die Standardwerte zu zeigen.
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;
#/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";