Pergunta

Eu estou tentando recolher os valores de linha de comando usando Getopt :: Std em meu 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;

Aqui, a primeira duas variáveis ??($ inputfile, $ outputfile) são obrigatórios, mas a última variável ($ parameter_value) é opcional e pode ser ignorada.

Eu estou tentando configurar algum valor por padrão para a última variável ($ parameter_value) quando a bandeira -p é ignorado na linha de comando.

Eu tentei usar o seguinte:

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

Aqui a sua passa o valor correto quando o sinalizador -p é ignorado na linha de comando. Mas o problema é quando eu estou fornecendo algum valor na linha de comando (por exemplo -p 58), o mesmo valor 20 é passado para o programa em vez de 58 que eu passei da linha de comando.

Você pode por favor me ajudem, apontando os erros que eu estou fazendo aqui?

Obrigado.

Foi útil?

Solução

#/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

Outras dicas

A melhor coisa é usar Getopt :: Longo e usar um hash em vez de variáveis ??individuais. Então você pode passar valores padrão pré-preencher o array

    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;

Eu sugiro definindo as variáveis ??opt para os padrões antes de chamar getopts. Além disso, você pode usar as variáveis ??$ opt_ em sua mensagem de uso para mostrar os valores padrão.

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";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top