Question

J'essaie de collecter les valeurs de la ligne de commande à l'aide de Getopt :: Std dans mon script 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;

Ici, les deux premières variables ($ inputfile, $ outputfile) sont obligatoires mais la dernière variable ($ parameter_value) est facultative et peut être ignorée.

J'essaie de définir une valeur par défaut sur la dernière variable ($ valeur_paramètre) lorsque l'indicateur -p est ignoré sur la ligne de commande.

J'ai essayé d'utiliser ceci:

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

Ici, sa passe la valeur correcte lorsque l'option -p est ignorée en ligne de commande. Mais le problème est que lorsque je fournis une valeur à partir de la ligne de commande (par exemple -p 58), la même valeur 20 est transmise au programme au lieu de 58 que j’ai passé de la ligne de commande.

Pouvez-vous m'aider en signalant les erreurs que je fais ici?

Merci.

Était-ce utile?

La solution

#/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 "
C:\Temp> ks -iinput -ooutput -p55
input
output
55
C:\Temp> ks -iinput -ooutput
input
output
20
<*>\n" for $inputfile, $outputfile, $parameter_value;
<*> <*>

Autres conseils

La meilleure chose à faire est d'utiliser GetOpt :: Long et d'utiliser un hachage au lieu de variables individuelles. Ensuite, vous pouvez passer les valeurs par défaut en pré-renseignant le tableau

    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;

Je suggère de définir les variables opt par défaut avant d'appeler getopts. De plus, vous pouvez ensuite utiliser les variables $ opt_ dans votre message d'utilisation pour afficher les valeurs par défaut.

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";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top