Estou trabalhando em um script Perl. Como posso passar parâmetros de linha de comando para ele?
Exemplo:
script.pl "string1" "string2"
perl
command-line
lamcro
fonte
fonte
./script.pl
aconteça ou muita coisa não vai acontecer no tempo de execução.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
eGetOpt::Long
processá-los facilmente.GetOpt::Std
suporta apenas comutadores de caractere único eGetOpt::Long
é muito mais flexível. DeGetOpt::Long
: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
.fonte
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:A partir daqui .
fonte
$#ARGV + 1
você também poderia ter dito@ARGV
ARGV[0]
ou$argv[1]
se você estiver procurando por um argumento específico.irá imprimir cada argumento.
fonte
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.
fonte
@ARGV
sem qualquer ação de você apenas como C / C ++ fornecê-los através argv / argcAinda outra opção é usar perl -s, por exemplo:
Então chame assim:
Ou consulte o artigo original para obter mais detalhes:
fonte
Você pode acessá-los diretamente, atribuindo a variável especial
@ARGV
a uma lista de variáveis. Então, por exemplo:perl tmp.pl 1 2 3 4 5
fonte
Se os argumentos forem nomes de arquivos para leitura, use o operador diamond (<>) para obter seu conteúdo:
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:(Observe que fazer isso com
shift
só funcionará se você estiver fora de todos ossub
s. Em asub
, ele recuperará a lista de argumentos passados para osub
e não dos passados para o programa.)fonte
fonte
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 .
fonte