Je travaille sur un script Perl. Comment puis-je lui passer des paramètres de ligne de commande?
Exemple:
script.pl "string1" "string2"
perl
command-line
lamcro
la source
la source
./script.pl
sinon il ne se passera rien au moment de l'exécution.Réponses:
Tout dépends de ce que tu veux faire. Si vous souhaitez utiliser les deux arguments comme fichiers d'entrée, vous pouvez simplement les transmettre puis utiliser
<>
pour lire leur contenu.S'ils ont une signification différente, vous pouvez les utiliser
GetOpt::Std
etGetOpt::Long
les traiter facilement.GetOpt::Std
prend en charge uniquement les commutateurs à un seul caractère etGetOpt::Long
est beaucoup plus flexible. DeGetOpt::Long
:Il
@ARGV
existe également une variable spéciale contenant tous les arguments de ligne de commande.$ARGV[0]
est le premier (c'est-à-dire"string1"
dans votre cas) et$ARGV[1]
est le deuxième argument. Vous n'avez pas besoin d'un module spécial pour y accéder@ARGV
.la source
Contains the name of the current file when reading from <> .
Vous les transmettez comme vous le pensez, et dans votre script, vous les récupérez du tableau
@ARGV
. Ainsi:D' ici .
la source
$#ARGV + 1
vous auriez pu aussi dire@ARGV
ARGV[0]
ou$argv[1]
si vous recherchez un argument particulier.affichera chaque argument.
la source
Alternativement, une manière perlish plus sexy .....
my ($src, $dest) = @ARGV;
"Suppose" que deux valeurs sont transmises. Un code supplémentaire peut vérifier que l'hypothèse est sûre.
la source
@ARGV
sans aucune action de votre part, tout comme C / C ++ les fournit via argv / argcEncore une autre option consiste à utiliser perl -s, par exemple:
Alors appelez-le comme ceci:
Ou consultez l'article original pour plus de détails:
la source
Vous pouvez y accéder directement, en affectant la variable spéciale
@ARGV
à une liste de variables. Ainsi, par exemple:perl tmp.pl 1 2 3 4 5
la source
Si les arguments sont des noms de fichiers à lire, utilisez l'opérateur losange (<>) pour accéder à leur contenu:
Si les arguments sont des options / commutateurs, utilisez GetOpt :: Std ou GetOpt :: Long, comme déjà montré par slavy13.myopenid.com.
Si c'est quelque chose d'autre, vous pouvez y accéder en parcourant explicitement @ARGV ou avec la
shift
commande:(Notez que faire cela avec
shift
ne fonctionnera que si vous êtes en dehors de tous lessub
s. Dans asub
, il récupérera la liste des arguments passés ausub
plutôt que ceux passés au programme.)la source
la source
Si vous voulez juste quelques valeurs, vous pouvez simplement utiliser le tableau @ARGV. Mais si vous cherchez quelque chose de plus puissant pour traiter les options de ligne de commande, vous devriez utiliser Getopt :: Long .
la source