Risposte:
Dipende da cosa vuoi fare. Se si desidera utilizzare i due argomenti come file di input, è possibile passarli e utilizzarli<>
per leggere il loro contenuto.
Se hanno un significato diverso, puoi usarli GetOpt::Std
ed GetOpt::Long
elaborarli facilmente. GetOpt::Std
supporta solo switch a carattere singolo ed GetOpt::Long
è molto più flessibile. Da 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
In alternativa, @ARGV
è una variabile speciale che contiene tutti gli argomenti della riga di comando. $ARGV[0]
è il primo (cioè "string1"
nel tuo caso) ed $ARGV[1]
è il secondo argomento. Non è necessario un modulo speciale per accedere @ARGV
.
Contains the name of the current file when reading from <> .
Li passi proprio come stai pensando, e nella tua sceneggiatura li prendi dall'array @ARGV
. Così:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
Da qui .
$#ARGV + 1
te avresti potuto anche dire@ARGV
ARGV[0]
o $argv[1]
se stai cercando argomenti particolari.
foreach my $arg (@ARGV) {
print $arg, "\n";
}
stamperà ogni argomento.
In alternativa, un modo perlish più sexy .....
my ($src, $dest) = @ARGV;
"Presuppone" vengono passati due valori. Il codice aggiuntivo può verificare che il presupposto sia sicuro.
@ARGV
senza alcuna azione da parte tua, proprio come C / C ++ li fornisce tramite argv / argc
Un'altra opzione è usare perl -s, ad esempio:
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
Quindi chiamalo così:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
Oppure vedi l'articolo originale per maggiori dettagli:
Se gli argomenti sono nomi di file da cui leggere, utilizzare l'operatore diamond (<>) per ottenere il loro contenuto:
while (my $line = <>) {
process_line($line);
}
Se gli argomenti sono opzioni / opzioni, utilizzare GetOpt :: Std o GetOpt :: Long, come già mostrato da slavy13.myopenid.com.
Nel caso in cui siano qualcos'altro, puoi accedervi camminando attraverso @ARGV esplicitamente o con il shift
comando:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Si noti che farlo con shift
funzionerà solo se si è al di fuori di tutte le sub
s. All'interno di a sub
, verrà recuperato l'elenco degli argomenti passati al sub
piuttosto che quelli passati al programma.)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Se vuoi solo alcuni valori, puoi semplicemente usare l'array @ARGV. Ma se stai cercando qualcosa di più potente per eseguire alcune opzioni della riga di comando, dovresti usare Getopt :: Long .
./script.pl
accada o che non succederà nulla di simile a venire.