10
votes

Comment puis-je définir des valeurs par défaut à l'aide de getOPT: STD?

J'essaie de collecter les valeurs de la ligne de commande à l'aide de getopt :: std dans Mon script Perl.

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


0 commentaires

4 Réponses :


17
votes

La meilleure chose à faire est d'utiliser getopt :: long et utiliser un hachage à la place de variables individuelles. Ensuite, vous pouvez passer des valeurs par défaut en pré-peuplant 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;


0 commentaires

16
votes
C:\Temp> ks -iinput -ooutput
input
output
20

5 commentaires

Thanx Sinan, cela fonctionne très bien et conserve le format de mon codage. Merci une tonne.


Si vous utilisez 5.10+, il serait préférable d'utiliser // au lieu de || parce que ces derniers tests pour la vérité, non définis. Il vous empêchera de pouvoir passer de fausses valeurs (par exemple 0). Le moyen à long terme d'obtenir un comportement équivalent avant 5,10 est $ x = défini $ y? $ y: z z est la valeur par défaut.


@Michael Carman je suppose que j'ai supposé que 0 n'était pas une valeur valide.


Donc, je suppose qu'il y a eu un problème d'utilisation de notre dans la déclaration d'affectation elle-même, et l'utiliser à l'avance la corrige? Pourriez-vous développer quelle est la différence entre votre code et SUREN?


@Rob Kennedy en termes de code posté, le placement de notre ne ferait pas la différence. Tout ce que je peux déduire, c'est qu'il y a quelque chose d'autre qui se passe dans son strict -free, avertissements -free code qui a causé ce dernier notre pour être Dans le cadre d'un autre package que celui défini par getopts .



1
votes

Je suggère de définir les variables opt à 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;


1 commentaires

Ou utilisez simplement $ opt_i quand vous en avez besoin. Ensuite, il est clair que c'est un paramètre.



0
votes
#/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";

0 commentaires