Já vi muitas maneiras de executar códigos ou scripts Perl, com sinalizadores diferentes. No entanto, quando tento pesquisar no Google o que significa cada sinalizador, obtenho principalmente resultados para sites Perl genéricos e nenhuma informação específica sobre os sinalizadores ou seu uso é encontrada lá.
Abaixo estão as sinalizações que encontro com mais frequência e não tenho ideia do que significam:
- perl -pe
- perl -pi
- perl -p
- perl -w
- perl -d
- perl -i
- perl -t
Ficarei muito grato se você me disser o que cada um deles significa e alguns casos de uso para eles, ou pelo menos me dizer uma maneira de descobrir seu significado.
perl
command-line
flags
Tudor Constantin
fonte
fonte
perldoc perlrun
tem uma lista de todas as opções de linha de comando que o Perl aceita.Respostas:
Sim, o Google é notoriamente difícil para procurar sinais de pontuação e, infelizmente, Perl não parecem ser maioritariamente constituído por pontuação :-)
As opções de linha de comando são todas detalhadas em perlrun . (disponível na linha de comando chamando
perldoc perlrun
)Analisando as opções brevemente, uma por uma:
fonte
perldoc perlrun
. Eu apaguei minha resposta. :-)-w
geralmente deve ser evitado, pois permite avisos para todos os códigos, incluindo módulos CPAN que não foram escritos com os avisos em mente. Os resultados são geralmente muito barulhentos e também inúteis.-w
geralmente é evitado, mas deve ser substituído poruse warnings
em seu próprio código.use warnings
em meu próprio código, mas -w tem uma utilidade - ajuda a eliminar módulos CPAN mal escritos. :-)-i
leva uma extensão para o backup.-e
recebe um comando perl. Em-0ep
você está dizendo ao perl que 'p' é um comando perl ao invés de um argumento. Isso não funcionará bem.A
-p
bandeira basicamente executa o script com-e
permite que você passe um script paraSTDIN
-i
direciona o intérprete para que todos os dados passadosSTDIN
pelo script em execução sejam executados no local.-w
é o mesmo queuse warnings;
, mas em um escopo global e não local-d
executa o depurador Perlfonte
-w
não é exatamente o mesmo queuse warnings
, o último tem como escopo o arquivo localOutros mencionaram perlrun. Se você usar B :: Deparse, poderá ver o que significa (para a maioria das coisas):
1 é representado por '???', porque é totalmente otimizado.
-i define $ ^ I, gosto
Mas lembre-se, <ARGV> usa 2 argumentos abertos, então não tenha nomes de arquivos que comecem com
> <
ou comecem / terminem com|
.fonte
Existe também um sinalizador importante
-n
que não é mencionado na lista.-n
funciona da mesma forma-p
, mas não imprime$_
por padrão. Isso pode ser muito útil na filtragem de arquivos de texto.Desta forma, Perl pode substituir
grep | sed
em uma única linha.Por exemplo:
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt
Irá imprimir todos os valores inteiros encontrados após "Mensagens lidas:" e nada mais.
fonte
print $1
é o mesmo queprint
(print $_
).echo abc | perl -nw -e "print if (1)"
irá imprimirabc
. Não há necessidade de$1
referência.