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
et GetOpt::Long
les traiter facilement. GetOpt::Std
prend en charge uniquement les commutateurs à un seul caractère 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, # string
"verbose" => \$verbose); # flag
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
.
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:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
D' ici .
$#ARGV + 1
vous auriez pu aussi dire@ARGV
ARGV[0]
ou $argv[1]
si vous recherchez un argument particulier.
foreach my $arg (@ARGV) {
print $arg, "\n";
}
affichera chaque argument.
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.
@ARGV
sans aucune action de votre part, tout comme C / C ++ les fournit via argv / argc
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-le comme ceci:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
Ou consultez l'article original pour plus de détails:
Si les arguments sont des noms de fichiers à lire, utilisez l'opérateur losange (<>) pour accéder à leur contenu:
while (my $line = <>) {
process_line($line);
}
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:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Notez que faire cela avec shift
ne fonctionnera que si vous êtes en dehors de tous les sub
s. Dans a sub
, il récupérera la liste des arguments passés au sub
plutôt que ceux passés 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 traiter les options de ligne de commande, vous devriez utiliser Getopt :: Long .
./script.pl
sinon il ne se passera rien au moment de l'exécution.