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.

War es hilfreich?

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";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top