Perl - Variáveis ​​Especiais

Existem algumas variáveis ​​que têm um significado predefinido e especial em Perl. Elas são as variáveis ​​que usam caracteres de pontuação após o indicador de variável usual ($, @ ou%), como $ _ (explicado abaixo).

A maioria das variáveis ​​especiais tem um nome longo do tipo inglês, por exemplo, a variável de erro do sistema operacional $! pode ser escrito como $ OS_ERROR. Mas se você vai usar o inglês como nomes, então você terá que colocar uma linhause English;na parte superior do arquivo do programa. Isso orienta o intérprete a captar o significado exato da variável.

A variável especial mais comumente usada é $ _, que contém a entrada padrão e a string de pesquisa de padrões. Por exemplo, nas seguintes linhas -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print $_;
   print "\n";
}

Quando executado, isso produzirá o seguinte resultado -

hickory
dickory
doc

Novamente, vamos verificar o mesmo exemplo sem usar a variável $ _ explicitamente -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print;
   print "\n";
}

Quando executado, isso também produzirá o seguinte resultado -

hickory
dickory
doc

Na primeira vez que o loop é executado, "hickory" é impresso. Na segunda vez, "dickory" é impresso e, na terceira vez, "doc" é impresso. Isso porque em cada iteração do loop, a string atual é colocada em $ _ e é usada por padrão por print. Aqui estão os lugares onde Perl assumirá $ _ mesmo que você não o especifique -

  • Várias funções unárias, incluindo funções como ord e int, bem como todos os testes de arquivo (-f, -d), exceto para -t, cujo padrão é STDIN.

  • Várias funções de lista, como imprimir e desvincular.

  • As operações de correspondência de padrões m //, s /// e tr /// quando usadas sem um operador = ~.

  • A variável iteradora padrão em um loop foreach se nenhuma outra variável for fornecida.

  • A variável iteradora implícita nas funções grep e map.

  • O local padrão para colocar um registro de entrada quando o resultado de uma operação de entrada de linha é testado por si mesmo como o único critério de um teste while (isto é,). Observe que fora de um teste de tempo, isso não acontecerá.

Tipos de Variáveis ​​Especiais

Com base no uso e na natureza das variáveis ​​especiais, podemos categorizá-las nas seguintes categorias -

  • Variáveis ​​especiais escalares globais.
  • Variáveis ​​especiais de matriz global.
  • Variáveis ​​especiais de hash globais.
  • Manipuladores de arquivos especiais globais.
  • Constantes especiais globais.
  • Variáveis ​​especiais de expressão regular.
  • Filehandle Special Variables.

Variáveis ​​Especiais Escalares Globais

Aqui está a lista de todas as variáveis ​​especiais escalares. Listamos os nomes correspondentes em inglês junto com os nomes simbólicos.

$ _ A entrada padrão e o espaço de pesquisa de padrões.
$ ARG
$. O número da linha de entrada atual do último filehandle que foi lido. Um fechamento explícito no filehandle redefine o número da linha.
$ NR
$ / O separador de registro de entrada; nova linha por padrão. Se definido como string nula, trata as linhas em branco como delimitadores.
$ RS
$, O separador de campo de saída para o operador de impressão.
$ OFS
$ \ O separador de registro de saída para o operador de impressão.
$ ORS
$ " Como "$", exceto que se aplica a valores de lista interpolados em uma string entre aspas (ou string interpretada semelhante). O padrão é um espaço.
$ LIST_SEPARATOR
$; O separador de subscrito para emulação de array multidimensional. O padrão é "\ 034".
$ SUBSCRIPT_SEPARATOR
$ ^ L O que um formato produz para realizar um formfeed. O padrão é "\ f".
$ FORMAT_FORMFEED
$: O conjunto atual de caracteres após o qual uma string pode ser quebrada para preencher os campos de continuação (começando com ^) em um formato. O padrão é "\ n" ".
$ FORMAT_LINE_BREAK_CHARACTERS
$ ^ A O valor atual do acumulador de gravação para linhas de formato.
$ ACCUMULATOR
$ # Contém o formato de saída para números impressos (obsoleto).
$ OFMT
$? O status retornado pelo último fechamento do tubo, comando backtick (``) ou operador do sistema.
$ CHILD_ERROR
$! Se usado em um contexto numérico, produz o valor atual da variável errno, identificando o último erro de chamada do sistema. Se usado em um contexto de string, produz a string de erro do sistema correspondente.
$ OS_ERROR ou $ ERRNO
$ @ A mensagem de erro de sintaxe Perl do último comando eval.
$ EVAL_ERROR
$$ O pid do processo Perl executando este script.
$ PROCESS_ID ou $ PID
$ < O ID do usuário real (uid) deste processo.
$ REAL_USER_ID ou $ UID
$> O ID de usuário efetivo deste processo.
$ EFFECTIVE_USER_ID ou $ EUID
$ ( O ID de grupo real (gid) deste processo.
$ REAL_GROUP_ID ou $ GID
$) O gid efetivo desse processo.
$ EFFECTIVE_GROUP_ID ou $ EGID
$ 0 Contém o nome do arquivo que contém o script Perl sendo executado.
$ PROGRAM_NAME
$ [ O índice do primeiro elemento em uma matriz e do primeiro caractere em uma substring. O padrão é 0.
$] Retorna a versão mais o nível do patch dividido por 1000.
$ PERL_VERSION
$ ^ D O valor atual dos sinalizadores de depuração.
$ DEBUGGING
$ ^ E Mensagem de erro estendida em algumas plataformas.
$ EXTENDED_OS_ERROR
$ ^ F O descritor máximo de arquivo do sistema, normalmente 2.
$ SYSTEM_FD_MAX
$ ^ H Contém dicas do compilador interno habilitadas por certos módulos pragmáticos.
$ ^ I O valor atual da extensão inplace-edit. Use undef para desabilitar a edição local.
$ INPLACE_EDIT
$ ^ M O conteúdo de $ M pode ser usado como um pool de memória de emergência no caso de Perl morrer com um erro de falta de memória. O uso de $ M requer uma compilação especial de Perl. Consulte o documento INSTALL para obter mais informações.
$ ^ O Contém o nome do sistema operacional para o qual o binário Perl atual foi compilado.
$ OSNAME
$ ^ P O sinalizador interno que o depurador limpa para que não depure a si mesmo.
$ PERLDB
$ ^ T A hora em que o script começou a ser executado, em segundos desde a época.
$ BASETIME
$ ^ W O valor atual da opção de aviso, verdadeiro ou falso.
$ AVISO
$ ^ X O nome com o qual o binário Perl foi executado.
$ EXECUTABLE_NAME
$ ARGV Contém o nome do arquivo atual ao ler de <ARGV>.

Variáveis ​​Especiais de Matriz Global

@ARGV A matriz que contém os argumentos da linha de comando destinados ao script.
@INC O array contendo a lista de locais onde procurar scripts Perl para serem avaliados pelas construções do, require ou use.
@F A matriz na qual as linhas de entrada são divididas quando a opção -a da linha de comando é fornecida.

Variáveis ​​Especiais Hash Globais

% INC O hash contendo entradas para o nome de arquivo de cada arquivo que foi incluído por meio de do ou require.
% ENV O hash contendo seu ambiente atual.
% SIG O hash usado para definir manipuladores de sinal para vários sinais.

Manipuladores de arquivos especiais globais

ARGV O manipulador de arquivos especial que itera sobre nomes de arquivos de linha de comando em @ARGV. Normalmente escrito como o filehandle nulo em <>.
STDERR O filehandle especial para erro padrão em qualquer pacote.
STDIN O filehandle especial para entrada padrão em qualquer pacote.
STDOUT O filehandle especial para saída padrão em qualquer pacote.
DADOS O filehandle especial que se refere a qualquer coisa após o token __END__ no arquivo que contém o script. Ou o identificador de arquivo especial para qualquer coisa após o token __DATA__ em um arquivo obrigatório, desde que você esteja lendo dados no mesmo pacote em que __DATA__ foi encontrado.
_ (sublinhado) O filehandle especial usado para armazenar em cache as informações do último stat, lstat ou operador de teste de arquivo.

Constantes Especiais Globais

__FIM__ Indica o fim lógico do seu programa. Qualquer texto a seguir é ignorado, mas pode ser lido por meio do manipulador de arquivos DATA.
__ARQUIVO__ Representa o nome do arquivo no ponto do programa em que ele é usado. Não interpolado em strings.
__LINHA__ Representa o número da linha atual. Não interpolado em strings.
__PACOTE__ Representa o nome do pacote atual em tempo de compilação ou indefinido se não houver pacote atual. Não interpolado em strings.

Variáveis ​​Especiais de Expressão Regular

$ digito Contém o texto correspondido pelo conjunto correspondente de parênteses no último padrão correspondido. Por exemplo, $ 1 corresponde a tudo o que estava contido no primeiro conjunto de parênteses na expressão regular anterior.
$ & A string correspondida pela última correspondência de padrão bem-sucedida.
$ MATCH
$ ` A string anterior foi correspondida pela última correspondência de padrão bem-sucedida.
$ PREMATCH
$ ' A sequência que segue o que foi correspondido pela última correspondência de padrão bem-sucedida.
$ POSTMATCH
$ + O último colchete correspondente ao último padrão de pesquisa. Isso é útil se você não sabe qual conjunto de padrões alternativos foi correspondido. Por exemplo: / Versão: (. *) | Revisão: (. *) / && ($ rev = $ +);
$ LAST_PAREN_MATCH

Variáveis ​​Especiais de Manipulação de Arquivos

$ | Se definido como diferente de zero, força um fflush (3) após cada gravação ou impressão no canal de saída atualmente selecionado.
$ OUTPUT_AUTOFLUSH
$% O número da página atual do canal de saída atualmente selecionado.
$ FORMAT_PAGE_NUMBER
$ = O comprimento da página atual (linhas imprimíveis) do canal de saída atualmente selecionado. O padrão é 60.
$ FORMAT_LINES_PER_PAGE
$ - O número de linhas restantes na página do canal de saída atualmente selecionado.
$ FORMAT_LINES_LEFT
$ ~ O nome do formato de relatório atual para o canal de saída atualmente selecionado. O padrão é o nome do filehandle.
$ FORMAT_NAME
$ ^ O nome do formato do topo da página atual para o canal de saída atualmente selecionado. O padrão é o nome do filehandle com _TOP anexado.
$ FORMAT_TOP_NAME