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";
4 Réponses :
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;
C:\Temp> ks -iinput -ooutput input output 20
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 // code> au lieu de
|| code> 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 code> où
z code> 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 code> 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 code> 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 code> -free,
avertissements code> -free code qui a causé ce dernier
notre code> pour être Dans le cadre d'un autre package que celui défini par
getopts code>.
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;
Ou utilisez simplement $ opt_i code> quand vous en avez besoin. Ensuite, il est clair que c'est un paramètre.
#/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";