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";