Respostas:
Depende do que você quer fazer. Se você deseja usar os dois argumentos como arquivos de entrada, basta passá-los e usá-los <>
para ler seu conteúdo.
Se eles tiverem um significado diferente, você poderá usar GetOpt::Std
e GetOpt::Long
processá-los facilmente. GetOpt::Std
suporta apenas comutadores de caractere único e GetOpt::Long
é muito mais flexível. 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
Como alternativa, @ARGV
é uma variável especial que contém todos os argumentos da linha de comandos. $ARGV[0]
é o primeiro (ou seja, "string1"
no seu caso) e $ARGV[1]
é o segundo argumento. Você não precisa de um módulo especial para acessar @ARGV
.
Contains the name of the current file when reading from <> .
Você as passa exatamente como está pensando e, no seu script, as obtém da matriz @ARGV
. Igual a:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
A partir daqui .
$#ARGV + 1
você também poderia ter dito@ARGV
ARGV[0]
ou $argv[1]
se você estiver procurando por um argumento específico.
foreach my $arg (@ARGV) {
print $arg, "\n";
}
irá imprimir cada argumento.
Como alternativa, uma maneira perlish mais sexy ...
my ($src, $dest) = @ARGV;
"Assume" dois valores são passados. Código extra pode verificar que a suposição é segura.
@ARGV
sem qualquer ação de você apenas como C / C ++ fornecê-los através argv / argc
Ainda outra opção é usar perl -s, por exemplo:
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
Então chame assim:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
Ou consulte o artigo original para obter mais detalhes:
Se os argumentos forem nomes de arquivos para leitura, use o operador diamond (<>) para obter seu conteúdo:
while (my $line = <>) {
process_line($line);
}
Se os argumentos forem opções / opções, use GetOpt :: Std ou GetOpt :: Long, como já mostrado por slavy13.myopenid.com.
Com a chance de serem algo mais, você pode acessá-los através do @ARGV explicitamente ou com o shift
comando:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Observe que fazer isso com shift
só funcionará se você estiver fora de todos os sub
s. Em a sub
, ele recuperará a lista de argumentos passados para o sub
e não dos passados para o programa.)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Se você quiser apenas alguns valores, basta usar a matriz @ARGV. Mas se você está procurando algo mais poderoso para fazer o processamento de algumas opções de linha de comando, use Getopt :: Long .
./script.pl
aconteça ou muita coisa não vai acontecer no tempo de execução.