Comment puis-je transmettre des arguments de ligne de commande à un programme Perl?

Je travaille sur un script Perl. Comment puis-je lui transmettre des parameters de ligne de commande?

Exemple:

script.pl "ssortingng1" "ssortingng2" 

Cela dépend de ce que vous voulez faire. Si vous souhaitez utiliser les deux arguments en tant que fichiers d’entrée, vous pouvez simplement les transmettre, puis utiliser <> pour lire leur contenu.

Si elles ont un sens différent, vous pouvez utiliser GetOpt::Std et GetOpt::Long pour les traiter facilement. GetOpt::Std ne prend en charge que les commutateurs à caractère unique et GetOpt::Long est beaucoup plus flexible. De GetOpt::Long :

 use Getopt::Long; my $data = "file.dat"; my $length = 24; my $verbose; $result = GetOptions ("length=i" => \$length, # numeric "file=s" => \$data, # ssortingng "verbose" => \$verbose); # flag 

@ARGV est une variable spéciale contenant tous les arguments de la ligne de commande. $ARGV[0] est le premier (ie. "ssortingng1" dans votre cas) et $ARGV[1] est le second argument. Vous n’avez pas besoin d’un module spécial pour accéder à @ARGV .

Vous les transmettez comme vous le pensez, et dans votre script, vous les obtenez du tableau @ARGV . Ainsi:

 my $numArgs = $#ARGV + 1; print "thanks, you gave me $numArgs command-line arguments.\n"; foreach my $argnum (0 .. $#ARGV) { print "$ARGV[$argnum]\n"; } 

De là

 foreach my $arg (@ARGV) { print $arg, "\n"; } 

imprimera chaque argument.

Alternativement, une façon plus sexy perlish …..

my ($src, $dest) = @ARGV;

“Suppose” que deux valeurs sont passées. Un code supplémentaire peut vérifier que l’hypothèse est sûre.

Encore une autre option consiste à utiliser perl -s, par exemple:

 #!/usr/bin/perl -s print "value of -x: $x\n"; print "value of -name: $name\n"; 

Alors appelez comme ceci:

 % ./myprog -x -name=Jeff value of -x: 1 value of -name: Jeff 

Ou voir l’article original pour plus de détails:

Vous pouvez y accéder directement, en affectant la variable spéciale @ARGV à une liste de variables. Donc, par exemple:

 ( $st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV; 

perl tmp.pl 1 2 3 4 5

entrer la description de l'image ici

Si les arguments sont des noms de fichiers à lire, utilisez l’opérateur diamond (<>) pour obtenir leur contenu:

 while (my $line = <>) { process_line($line); } 

Si les arguments sont des options / switches, utilisez GetOpt :: Std ou GetOpt :: Long, comme indiqué par slavy13.myopenid.com.

Si elles sont quelque chose d’autre, vous pouvez y accéder en parcourant explicitement @ARGV ou avec la commande shift :

 while (my $arg = shift) { print "Found argument $arg\n"; } 

(Notez que cela avec shift ne fonctionnera que si vous êtes en dehors de tous les sub s. Dans un sub , il récupérera la liste des arguments passés au subsub plutôt que ceux transmis au programme.)

 my $output_file; if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i")) { $output_file= chomp($ARGV[1]) ; } 

Si vous voulez juste quelques valeurs, vous pouvez simplement utiliser le tableau @ARGV. Mais si vous cherchez quelque chose de plus puissant pour pouvoir traiter certaines options en ligne de commande, vous devez utiliser Getopt :: Long .