2014-08-28 5 views
-2

(Avant de signaler la question, lisez-la d'abord! Je sais que des questions similaires ont été posées, mais dans des formes différentes et incomplètes).@ARGV en Perl (arguments de la ligne de commande)

J'essaye de trouver ce que la manière normale et normale est de manipuler des arguments de ligne de commande ou des options de manuscrit. Supposons que le script peut prendre n'importe quel type d'arguments ou d'options. Par exemple:

./myscript.pl runabnormal --help /sbin/proc -f filename CONFIG=set.config LOG=me.log

La meilleure façon que je suis au courant de ce jour est à l'aide Dumper comme suit:

use strict; 
use warnings; 
use Data::Dumper qw(Dumper); 

print Dumper \@ARGV; 

sortie:

$VAR1 = [ 
     'runabnormal', 
     '--help', 
     '/sbin/proc', 
     '-f', 
     'filename', 
     'CONFIG=set.config', 
     'LOG=me.log' 
    ]; 

Tout conseil général sur ce? Comment les programmeurs Perl gèrent-ils généralement les arguments complexes entrés dans leurs scripts?

+3

Vous dites que votre question est spécial et différent des autres questions, mais il me semble que tout ce que vous demandez comment utiliser '@ ARGV' ? L'utilisation de 'Data :: Dumper' n'est pas une" meilleure "méthode, car elle imprime uniquement les valeurs de vos arguments. – TLP

Répondre

2

Utilisation Getopt::Long:

use strict; 
use warnings; 

use Getopt::Long; 

GetOptions(
    "log=s" => \(my $log),     # string 
    "file=s" => \(my $file = "file.dat"), # string with default 
    "help"  => \(my $help),     # boolean 
    "config=s" => \(my $config),    # string 
) or die "Error in command line arguments"; 

# Pulls in: ("runabnormal", "/sbin/proc") 
my ($state, $proc) = @ARGV; 

Deux notes sur la ligne de commande args pratique courante:

  1. Les options sont généralement minuscules. Changez donc CONFIG=set.config en config=set.config
  2. Les options avec les paramètres sont précédées de deux tirets. --log=me.log

Par conséquent, les éléments suivants travailleraient:

./myscript.pl runabnormal --help /sbin/proc -f filename --config=set.config --log=me.log 
+0

Cela nécessite en fait '--config = set.config --log = me.log', mais c'est plus conventionnel de toute façon, et sûrement mieux si ces arguments' X = Y' sont arbitraires. // Qu'est-ce que 'my ($ state, $ proc) = @ARGV;'? – ikegami

+0

Bon oeil. manqué ça. Mis à jour en réponse. – Miller

+0

@ARGV était pour les deux non-options incluses dans son exemple. Décidé de ne plus penser à déchiffrer son intention et de juste l'insister. – Miller

Questions connexes