InglêsFrancêsEspanhol

favicon do OnWorks

perl5200delta - Online na nuvem

Execute perl5200delta no provedor de hospedagem gratuita OnWorks no Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS

Este é o comando perl5200delta que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS

PROGRAMA:

NOME


perl5200delta - o que há de novo no perl v5.20.0

DESCRIÇÃO


Este documento descreve as diferenças entre as versões 5.18.0 e 5.20.0.

Se você estiver atualizando de uma versão anterior, como 5.16.0, leia primeiro perl5180delta,
que descreve as diferenças entre 5.16.0 e 5.18.0.

núcleo Melhorias


experimental Subrotina assinaturas
Sintaxe declarativa para desdobrar a lista de argumentos em variáveis ​​lexicais. "sub foo ($ a, $ b)
{...} "verifica o número de argumentos e os coloca em variáveis ​​lexicais.
As assinaturas não são equivalentes ao idioma existente de "sub foo {my ($ a, $ b) = @_; ...}".
As assinaturas só estão disponíveis ativando um recurso não padrão e gerando avisos
sobre ser experimental. O conflito sintático com protótipos é gerenciado desativando o
sintaxe de protótipo curta quando as assinaturas são ativadas.

Veja "Assinaturas" em perlsub para detalhes.

"sub" s agora levar a "protótipo" atributo
Ao declarar ou definir um "sub", o protótipo agora pode ser especificado dentro de um
Atributo "prototype" em vez de parênteses após o nome.

Por exemplo, "sub foo ($$) {}" pode ser reescrito como "sub foo: prototype ($$) {}".

Mais consistente protótipo análise
Vários pontos e vírgulas em protótipos de sub-rotina têm sido tolerados e tratados como um
único ponto e vírgula. Houve um caso em que isso não aconteceu. Uma sub-rotina cujo
protótipo começa com "*" ou "; *" pode afetar se uma palavra de barra é considerada um método
nome ou sub chamada. Isso agora se aplica também a ";;; *".

Espaço em branco há muito é permitido dentro de protótipos de sub-rotina, então "sub ($ $)" é
equivalente a "sub ($$)", mas até agora ele foi removido quando a sub-rotina foi analisada.
Portanto, o espaço em branco era não permitido em protótipos definidos por "Scalar :: Util :: set_prototype". Agora
é permitido e o analisador não remove mais os espaços em branco. Isso significa "protótipo
&mysub" retorna o protótipo original, com espaço em branco e tudo.

"rand" agora utiliza a consistente acaso número gerador
Anteriormente, o perl usava um gerador de números aleatórios específico da plataforma, variando entre os
libc rand (), aleatório () or drand48 ().

Isso significava que a qualidade dos números aleatórios de perl variava de plataforma para plataforma,
dos 15 bits de rand () no Windows para 48 bits em plataformas POSIX, como Linux com
drand48 ().

Perl agora usa seu próprio drand48 () implementação em todas as plataformas. Isso não
tornar o "rand" de perl criptograficamente seguro. [perl # 115928]

Novo fatia sintaxe
A nova sintaxe %hash{...} e %array[...] retorna uma lista de chave/valor (ou índice/valor)
pares. Consulte "Fatias de hash de chave / valor" em perldata.

experimental Postfix Desreferenciamento
Quando o recurso "postderef" está em vigor, as seguintes equivalências sintáticas são definidas
acima:

$ sref -> $ *; # igual a $ {$ sref} # interpola
$ aref -> @ *; # igual a @ {$ aref} # interpola
$ href ->% *; # igual a% {$ href}
$ cref -> & *; # igual a & {$ cref}
$ gref -> **; # igual a * {$ gref}

$ aref -> $ # *; # igual a $ # {$ aref}

$ gref -> * {$ slot}; # igual a * {$ gref} {$ slot}

$ aref -> @ [...]; # igual a @ $ aref [...] # interpola
$href->@{ ... }; # igual a @$href{ ... } # interpola
$ aref ->% [...]; # igual a% $ aref [...]
$ href ->% {...}; # igual a% $ href {...}

Aqueles marcados como interpolando somente interpolar se o recurso "postderef_qq" associado for
também habilitado. Este recurso é experimental e irá desencadear
Avisos de categoria "experimental :: postderef" quando usados, a menos que sejam suprimidos.

Para obter mais informações, consulte a seção Postfix Dereference Syntax do perlref.

Unicode 6.3 agora suportado
Perl agora suporta e vem com Unicode 6.3 (embora Perl possa ser recompilado com qualquer
versão anterior do Unicode também). Uma lista detalhada das alterações do Unicode 6.3 está em
<http://www.unicode.org/versions/Unicode6.3.0/>.

Novo "\ p {Unicode}" regular expressão de cinto de segurança propriedade
Este é um sinônimo para "\ p {Any}" e corresponde ao conjunto de pontos de código definidos por Unicode 0 -
0x10FFFF.

Melhor 64-bit ajuda
Em plataformas de 64 bits, as funções de array interno agora usam offsets de 64 bits, permitindo que Perl
arrays para conter mais de 2 ** 31 elementos, se você tiver memória disponível.

O mecanismo de expressão regular agora oferece suporte a strings com mais de 2 ** 31 caracteres. [perl
# 112790, # 116907]

As funções PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt e PerlIO_set_ptrcnt agora
têm SSize_t, em vez de int, retornam valores e parâmetros.

"usar localidade" agora trabalho on UTF-8 local
Até esta versão, apenas as localidades de byte único, como a série ISO 8859, eram suportadas.
Agora, as localidades UTF-8 multibyte cada vez mais comuns também são suportadas. Uma localidade UTF-8
é aquele em que o conjunto de caracteres é Unicode e a codificação é UTF-8. O POSIX
Operações da categoria "LC_CTYPE" (mudança de maiúsculas e minúsculas (como "lc ()", "\ U") e caractere
classificação ("\ w", "\ D", "qr / [[: punct:]] /")) em tal local funciona como se não fosse
sob a localidade, mas como se em "use o recurso 'unicode_strings'", exceto as regras de contaminação
São seguidos. A classificação permanece por ordem de ponto de código nesta versão. [perl # 56820].

"usar localidade" agora compila on sistemas sem local habilidade
Fazer isso anteriormente fazia com que o programa não compilasse. Dentro de seu escopo o programa
se comporta como se estivesse no local "C". Assim, programas escritos para plataformas que suportam localidades
pode ser executado em plataformas sem localidade sem alterações. Tenta mudar a localidade de
a localidade "C", obviamente, falhará.

Mais local inicialização recuo opções
Se houvesse um erro com locales durante a inicialização do Perl, ele desistia imediatamente e tentava
para usar a localidade "C". Agora ele primeiro tenta usar outras localidades fornecidas pelo ambiente
variáveis, conforme detalhado em "AMBIENTE" em perllocale. Por exemplo, se "LC_ALL" e
"LANG" estão configurados e usando o locale "LC_ALL" falha, o Perl agora tentará o "LANG"
locale, e somente se isso falhar, ele retornará para "C". Em máquinas Windows, Perl irá
tente, antes de usar "C", a localidade padrão do sistema se todas as localidades fornecidas pelo ambiente
variáveis ​​falham.

"-DL" tempo de execução opção agora adicionado for rastreamento local contexto
Isso é projetado para desenvolvedores de núcleo Perl para ajudar na depuração de erros em campo relacionados
local

-F agora implica -a e -a implica -n
Anteriormente -F sem -a era um ambiente autônomo e -a sem -n or -p era um ambiente autônomo, com este
mudar, se você fornecer -F então ambos -a e -n estão implícitos e se você fornecer -a então -n is
implícita.

Você ainda pode usar -p por seu comportamento extra. [perl # 116190]

$a e $b avisos isenção
As variáveis ​​especiais $ a e $ b, usadas em "classificar", agora estão isentas de avisos "usado uma vez",
mesmo onde "sort" não é usado. Isso torna mais fácil para os módulos CPAN fornecerem funções
usando $ ae $ b para fins semelhantes. [perl # 120462]

Segurança


Evitar possível ler of gratuitamente()d memória durante análise
Era possível que gratuitamente()d memória pode ser lida durante a análise no incomum
circunstância do programa Perl terminando com um heredoc e a última linha do arquivo em
disco sem caractere de terminação de nova linha. Isso foi consertado agora.

Incompatível Alterações


"Faz" pode não mais be usava para chamada sub-rotinas
O formulário "do SUBROUTINE (LIST)" resultou em um aviso de suspensão de uso desde Perl v5.0.0,
e agora é um erro de sintaxe.

Como citação escapar alterar
O caractere após "\ c" em uma string entre aspas ("..." ou qq (...)) ou regular
expressão agora deve ser um caractere imprimível e não pode ser "{".

Um literal "{" depois de "\ B" ou "\ b" agora é fatal.

Eles foram descontinuados no perl v5.14.0.

Contaminante acontece para mais circunstâncias; agora conforme para documentação
Isso afeta a correspondência de expressões regulares e a mudança de maiúsculas e minúsculas em uma string ("lc", "\ U",
etc..) dentro do escopo de "local de uso". O resultado agora está contaminado com base na operação,
não importa qual seja o conteúdo da string, como a documentação (perlsec, "SEGURANÇA"
em perllocale) indica que deveria. Anteriormente, para a operação de mudança de caso, se o
string não continha caracteres cuja mudança de caixa pudesse ser afetada pela localidade, o
o resultado não seria contaminado. Por exemplo, o resultado de "uc ()" em uma string vazia ou em um
contendo apenas pontos de código acima de Latin1 agora está corrompido, e não estava antes. Isto leva a
resultados de contaminação mais consistentes. Os padrões de expressão regular contaminam seus não binários
resultados (como $ &, $ 2) se e somente se o padrão contém elementos cuja correspondência depende
no local atual (potencialmente contaminado). Como as funções de mudança de caixa, o real
o conteúdo da string que está sendo correspondida agora não importa, enquanto antes importava. Por
exemplo, se o padrão contém um "\ w", os resultados serão corrompidos mesmo se a correspondência contiver
não tem que usar essa parte do padrão para ter sucesso ou falhar, porque o que um "\ w"
as correspondências dependem do local. No entanto, por exemplo, um "." em um padrão não habilitará
contaminante, porque o ponto corresponde a qualquer caractere único, e qual é a localidade atual
não muda de forma alguma o que combina e o que não.

"\ p {}", "\ P {}" correspondente tem mudado for não Unicode código pontos.
"\ p {}" e "\ P {}" são definidos por Unicode apenas em pontos de código definidos por Unicode ("U + 0000"
através de "U+10FFFF"). O comportamento deles ao combinar esses pontos de código Unicode legais é
inalterado, mas há mudanças para os pontos de código 0x110000 e acima. Anteriormente, Perl
tratou o resultado da correspondência "\p{}" e "\P{}" com eles como "undef", o que
se traduz em "falso". Para "\ P {}", isso foi então complementado em "verdadeiro". Um aviso
era para ser criado quando isso acontecesse. No entanto, várias otimizações podem
evitar o aviso, e os resultados eram muitas vezes contra-intuitivos, com uma correspondência e
seu aparente complemento é falso. Agora, todos os pontos de código não Unicode são tratados como
pontos de código Unicode não atribuídos típicos. Isso geralmente é mais do-What-I-Mean. Um aviso
é gerado apenas se os resultados forem indiscutivelmente diferentes de uma abordagem Unicode estrita, e
pelo que Perl costumava fazer. O código que precisa ser estritamente compatível com Unicode pode tornar isso
aviso fatal, e então o Perl sempre gera o aviso.

Os detalhes estão em "Além dos pontos de código Unicode" no perlunicode.

"\mortalha}" tem sido expandido para partida todos os possível código pontos
O elemento de padrão de expressão regular definido por Perl "\ p {All}", não usado no CPAN, usado para
corresponder apenas aos pontos de código Unicode; agora ele corresponde a todos os pontos de código possíveis; é isso
é equivalente a "qr /./ s". Assim, "\ p {All}" não é mais sinônimo de "\ p {Any}", que
continua a corresponder apenas aos pontos de código Unicode, como o Unicode diz que deveria.

Dados :: Dumper's saída pode alterar
Dependendo das estruturas de dados despejadas e as configurações definidas para Data :: Dumper, o despejado
a saída pode ter mudado em relação às versões anteriores.

Se você tiver testes que dependem da saída exata de Data :: Dumper, eles podem falhar.

Para evitar esse problema em seu código, teste a estrutura de dados avaliando o
estrutura despejada, em vez do próprio despejo.

Localidade decimal ponto personagem não mais vazamentos lado de fora of "usar localidade" escopo
Esta é na verdade uma correção de bug, mas alguns códigos passaram a depender da presença do bug, então
esta mudança está listada aqui. A localidade atual em que o programa está sendo executado não é
deve ser visível para o código Perl, exceto dentro do escopo de um "local de uso". Contudo,
até agora, em certas circunstâncias, o caractere usado para um ponto decimal (muitas vezes um
vírgula) vazou fora do escopo. Se o seu código for afetado por essa mudança, basta adicionar um
"usar localidade".

Atribuições of Windows soquetes erro códigos para $! agora preferir errno.h valores Acima de
WSAGetLastError () valores
Nas versões anteriores do Perl, o Windows cria soquetes de códigos de erro conforme retornado por WSAGetLastError ()
foram atribuídos a $! e algumas constantes, como ECONNABORTED, não em errno.h em VC ++ (ou
as várias portas do Windows do gcc) foram definidas para os valores WSAE * correspondentes para permitir $!
a ser testado em relação às constantes E * exportadas por Errno e POSIX.

Isso funcionou bem até VC ++ 2010 e mais tarde, que introduziu novas constantes E * com valores
> 100 em errno.h, incluindo alguns sendo (re) definidos por perl para valores WSAE *. Isso causou
problemas ao vincular o código XS a outras bibliotecas que usaram as definições originais
of errno.h constantes.

Para evitar esta incompatibilidade, o perl agora mapeia os códigos de erro WSAE * para valores E * onde
possível e atribui esses valores a $ !. As constantes E * exportadas por Errno e POSIX
são atualizados para corresponder, de modo que o teste $! contra eles, sempre que possível, irá
continue a trabalhar conforme o esperado, e todas as constantes E * encontradas em errno.h agora são exportados de
aqueles módulos com seus originais errno.h valores.

A fim de evitar a quebra no código Perl existente, que atribui valores WSAE * a $ !, perl
agora intercepta a atribuição e executa o mesmo mapeamento para valores E * que usa
internamente ao atribuir a $! em si.

No entanto, uma incompatibilidade com versões anteriores permanece: o código Perl existente que compara $!
em relação aos valores numéricos dos códigos de erro WSAE * que foram atribuídos anteriormente a $!
agora será quebrado nos casos em que um valor E * correspondente foi atribuído
em vez de. Este é apenas um problema para os valores E * <100, que sempre foram exportados de
Errno e POSIX com seus originais errno.h valores e, portanto, não pode ser usado para
Testes de código de erro WSAE * (por exemplo, WSAEINVAL é 10022, mas o EINVAL correspondente é 22). (E *
valores> 100, se presentes, foram redefinidos para valores WSAE * de qualquer maneira, então a compatibilidade pode ser
alcançado usando as constantes E*, que funcionarão antes e depois dessa alteração,
embora usando diferentes valores numéricos sob o capô.)

Funções "PerlIO_vsprintf" e "PerlIO_sprintf" sido afastado
Essas duas funções, não documentadas, não utilizadas no CPAN e problemáticas, foram removidas.

Deprecações


O "/ \ C /" personagem classe
A classe de caracteres de expressão regular "/ \ C /" está obsoleta. De perl 5.22 em diante
irá gerar um aviso, e do perl 5.24 em diante será uma expressão regular
erro do compilador. Se você precisar examinar os bytes individuais que compõem um código UTF8
caractere, então use "utf8 :: encode ()" na string (ou uma cópia) primeiro.

Literal ao controle caracteres in variável nomes
Esta depreciação afeta coisas como $ \ cT, onde \ cT é um controle literal (como um "NAK"
ou o caractere "RECONHECIMENTO NEGATIVO") no código-fonte. Surpreendentemente, parece que
originalmente pretendia ser a forma canônica de acessar variáveis ​​como $ ^ T, com
o formulário circunflexo apenas sendo adicionado como uma alternativa.

O formulário de controle literal está sendo preterido por dois motivos principais. Tem o que é provável
bugs não corrigíveis, como $ \ cI não funcionando como um alias para $ ^ I, e seu uso não sendo
portátil para plataformas não ASCII: Embora $ ^ T funcione em qualquer lugar, \ cT é um espaço em branco em
EBCDIC. [perl # 119123]

Referências para não inteiros e não positivo inteiros in $/
Definir $ / como uma referência para zero ou uma referência para um número inteiro negativo agora está obsoleto,
e vai se comportar exatamente como se estivesse definido como "undef". Se você quiser definir o comportamento de slurp
$ / para "undef" explicitamente.

Definir $ / como uma referência a um número não inteiro agora é proibido e gerará um erro. Perl
nunca documentou o que aconteceria neste contexto e enquanto costumava se comportar o
mesmo que definir $ / para o endereço das referências no futuro, pode se comportar de maneira diferente,
portanto, proibimos esse uso.

Personagem correspondente rotinas in POSIX
O uso de qualquer uma dessas funções no módulo "POSIX" agora está obsoleto: "isalnum",
"isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint", "ispunct", "isspace",
"isupper" e "isxdigit". As funções têm bugs e não funcionam na codificação UTF-8
cordas. Veja suas entradas no POSIX para mais informações.

Um aviso é gerado na primeira chamada para qualquer um deles de cada lugar no código que eles
são chamados. (Conseqüentemente, uma instrução repetida em um loop gerará apenas um aviso.)

Baseado em intérprete tópicos e guarante que os mesmos estão agora desencorajado
As "threads baseadas em interpretador" fornecidas por Perl não são o sistema rápido e leve para
multitarefa que se espera ou espera. Threads são implementados de uma forma que
torná-los fáceis de usar indevidamente. Poucas pessoas sabem como usá-los corretamente ou serão capazes de
Fornecer ajuda.

O uso de threads baseadas em intérpretes em perl é oficialmente desencorajado.

Módulo remoções
Os módulos a seguir serão removidos da distribuição principal em uma versão futura e
nesse momento precisará ser instalado a partir do CPAN. Distribuições no CPAN que requerem
esses módulos precisarão listá-los como pré-requisitos.

As versões principais desses módulos agora emitirão avisos de categoria "obsoleta" para alertar
você a este fato. Para silenciar esses avisos de suspensão de uso, instale os módulos em questão
do CPAN.

Observe que a remoção planejada desses módulos do núcleo não reflete um julgamento
sobre a qualidade do código e não deve ser tomado como uma sugestão de que seu uso seja
interrompido. Sua desinclusão do núcleo depende principalmente de sua necessidade de autoinicialização
uma instalação Perl totalmente funcional e com capacidade para CPAN, sem se preocupar com seu design.

CGI e seus pacotes CGI :: associados
inc :: mais recente
Pacote :: Constantes
Módulo :: Construir e seus associados Módulo :: Construir :: pacotes

Utilidade remoções
Os seguintes utilitários serão removidos da distribuição principal em uma versão futura,
e nesse momento precisará ser instalado a partir do CPAN.

encontrar2perl
s2p
a2d

Performance Melhorias


· Perl tem um novo mecanismo de cópia na gravação que evita a necessidade de copiar o interno
buffer de string ao atribuir de um escalar a outro. Isso torna a cópia grande
strings aparecem muito mais rápido. Modificando uma das duas (ou mais) strings após um
atribuição forçará uma cópia internamente. Isso torna desnecessário passar strings por
referência de eficiência.

Este recurso já estava disponível na versão 5.18.0, mas não estava habilitado por padrão. É o
padrão agora, e assim você não precisa mais construir perl com o configurar argumento:

-Accflags = -DPERL_NEW_COPY_ON_WRITE

Ele pode ser desabilitado (por enquanto) em uma compilação perl com:

-Accflags = -DPERL_NO_COW

Em alguns sistemas operacionais Perl pode ser compilado de tal forma que qualquer tentativa de
modificar os buffers de string compartilhados por vários SVs travará. Desta forma, os autores XS podem testar
que seus módulos manipulam escalares copy-on-write corretamente. Veja "Copiar na Gravação" em
perlguts para detalhes.

· Perl tem um otimizador para padrões de expressão regular. Ele analisa o padrão para
encontrar coisas como o comprimento mínimo que uma string deve ter para corresponder, etc. Agora
trata melhor os pontos de código que estão acima do intervalo Latin1.

· Executar uma regex que contém a âncora "^" (ou sua variante sob a bandeira "/ m")
foi feito muito mais rápido em várias situações.

· Valores de hash pré-computados agora são usados ​​em mais lugares durante a pesquisa de método.

· Pesquisas de chave de hash constante ($ hash {key} em oposição a $ hash {$ key}) há muito tempo
valor de hash interno calculado em tempo de compilação, para acelerar a pesquisa. Esta otimização
só agora foi aplicado também às fatias de hash.

· Operadores combinados "e" e "ou" em contexto vazio, como aqueles gerados para "a menos que
($ a && $ b) "e" if ($ a || b) "agora causam um curto-circuito diretamente no final da instrução.
[perl # 120128]

· Em certas situações, quando "return" é a última declaração no principal de uma sub-rotina
escopo, ele será otimizado. Isso significa código como:

sub baz {return $ cat; }

agora vai se comportar como:

sub baz {$ cat; }

que é notavelmente mais rápido.

[perl # 120765]

· Código como:

meu $ x; # ou @x,% x
meu $ y;

agora está otimizado para:

meu ($ x, $ y);

Em combinação com a otimização padrange introduzida na v5.18.0, isso significa mais
não inicializado, minhas declarações de variáveis ​​também são otimizadas, então:

meu $ x; meu @y; meu% z;

torna-se:

meu ($ x, @y,% z);

[perl # 121077]

· A criação de certos tipos de listas, incluindo array e fatias de hash, agora é
Mais rápido.

· A otimização para arrays indexados com um pequeno inteiro constante agora é aplicada para
inteiros no intervalo -128..127, em vez de 0..255. Isso deve acelerar o código Perl
usando expressões como $ x [-1], às custas de (presumivelmente muito mais raro) código usando
expressões como $ x [200].

· A primeira iteração sobre um grande hash (usando "keys" ou "each") agora é mais rápida. Isto é
alcançada pela pré-alocação do estado do iterador interno do hash, em vez de preguiçosamente
criá-lo quando o hash for iterado pela primeira vez. (Para pequenos hashes, o iterador ainda é
criado apenas quando necessário pela primeira vez. A suposição é que pequenos hashes são mais propensos a
ser usados ​​como objetos e, portanto, nunca alocados. Para hashes grandes, isso é menos
provável que seja verdade, e o custo de alocar o iterador é inundado pelo custo de
alocar espaço para o próprio hash.)

· Ao fazer uma correspondência de regex global em uma string que veio de "readline" ou "<>"
operador, os dados não são mais copiados desnecessariamente. [perl # 121259]

· A desreferenciação (como em "$ obj -> [0]" ou "$ obj -> {k}") agora é mais rápida quando $ obj é um
instância de uma classe que tem métodos sobrecarregados, mas não sobrecarrega nenhum dos
métodos de desreferenciação "@ {}", "% {}" e assim por diante.

· O otimizador do Perl não pula mais a otimização do código que segue certos "eval {}"
expressões (incluindo aquelas com um loop infinito aparente).

· A implementação agora faz um trabalho melhor de evitar trabalho sem sentido em tempo de execução.
Operações "nulas" sem efeitos internos (criadas como um efeito colateral da análise de Perl
programas) são normalmente excluídos durante a compilação. Essa exclusão agora é aplicada em
algumas situações que não foram tratadas anteriormente.

· Perl agora faz menos E / S de disco ao lidar com propriedades Unicode que cobrem até
três intervalos de pontos de código consecutivos.

Módulos e Pragmático


Novo Módulos e Pragmático
· Experimental 0.007 foi adicionado ao núcleo Perl.

· IO :: Socket :: IP 0.29 foi adicionado ao núcleo Perl.

Atualização do Módulos e Pragmático
· Archive :: Tar foi atualizado da versão 1.90 para 1.96.

· Arybase foi atualizado da versão 0.06 para 0.07.

· Attribute :: Handlers foi atualizado da versão 0.94 para 0.96.

· Atributos foram atualizados da versão 0.21 para 0.22.

· Autodie foi atualizado da versão 2.13 para 2.23.

· AutoLoader foi atualizado da versão 5.73 para 5.74.

· Autouse foi atualizado da versão 1.07 para 1.08.

· B foi atualizado da versão 1.42 para 1.48.

· B :: Concise foi atualizado da versão 0.95 para 0.992.

· B :: Debug foi atualizado da versão 1.18 para 1.19.

· B :: Deparse foi atualizado da versão 1.20 para 1.26.

· Base foi atualizado da versão 2.18 para 2.22.

· O benchmark foi atualizado da versão 1.15 para 1.18.

· Bignum foi atualizado da versão 0.33 para 0.37.

· Carp foi atualizado da versão 1.29 para 1.3301.

· CGI foi atualizado da versão 3.63 para 3.65. NOTA: CGI está obsoleto e pode ser
removido de uma versão futura do Perl.

· Charnames foi atualizado da versão 1.36 para 1.40.

· Class :: Struct foi atualizado da versão 0.64 para 0.65.

· Compress :: Raw :: Bzip2 foi atualizado da versão 2.060 para 2.064.

· Compress :: Raw :: Zlib foi atualizado da versão 2.060 para 2.065.

· Config :: Perl :: V foi atualizado da versão 0.17 para 0.20.

· Constante foi atualizado da versão 1.27 para 1.31.

· CPAN foi atualizado da versão 2.00 para 2.05.

· CPAN :: Meta foi atualizado da versão 2.120921 para 2.140640.

· CPAN :: Meta :: Requirements foi atualizado da versão 2.122 para 2.125.

· CPAN :: Meta :: YAML foi atualizado da versão 0.008 para 0.012.

· Data :: Dumper foi atualizado da versão 2.145 para 2.151.

· O banco de dados foi atualizado da versão 1.04 para 1.07.

· DB_File foi atualizado da versão 1.827 para 1.831.

· DBM_Filter foi atualizado da versão 0.05 para 0.06.

· Deprecate foi atualizado da versão 0.02 para 0.03.

· Devel :: Peek foi atualizado da versão 1.11 para 1.16.

· Devel :: PPPort foi atualizado da versão 3.20 para 3.21.

· O diagnóstico foi atualizado da versão 1.31 para 1.34.

· Digest :: MD5 foi atualizado da versão 2.52 para 2.53.

· Digest :: SHA foi atualizado da versão 5.84 para 5.88.

· O DynaLoader foi atualizado da versão 1.18 para 1.25.

· O Encode foi atualizado da versão 2.49 para 2.60.

· A codificação foi atualizada da versão 2.6_01 para 2.12.

· O inglês foi atualizado da versão 1.06 para 1.09.

$ OLD_PERL_VERSION foi adicionado como um alias de $].

· Errno foi atualizado da versão 1.18 para 1.20_03.

· O exportador foi atualizado da versão 5.68 para 5.70.

· ExtUtils :: CBuilder foi atualizado da versão 0.280210 para 0.280216.

· ExtUtils :: Command foi atualizado da versão 1.17 para 1.18.

· ExtUtils :: Embed foi atualizado da versão 1.30 para 1.32.

· ExtUtils :: Install foi atualizado da versão 1.59 para 1.67.

· ExtUtils :: MakeMaker foi atualizado da versão 6.66 para 6.98.

· ExtUtils :: Miniperl foi atualizado da versão para 1.01.

· ExtUtils :: ParseXS foi atualizado da versão 3.18 para 3.24.

· ExtUtils :: Typemaps foi atualizado da versão 3.19 para 3.24.

· ExtUtils :: XSSymSet foi atualizado da versão 1.2 para 1.3.

· O recurso foi atualizado da versão 1.32 para 1.36.

· Os campos foram atualizados da versão 2.16 para 2.17.

· Arquivo :: O nome de base foi atualizado da versão 2.84 para 2.85.

· Arquivo :: Copiar foi atualizado da versão 2.26 para 2.29.

· Arquivo :: DosGlob foi atualizado da versão 1.10 para 1.12.

· File :: Fetch foi atualizado da versão 0.38 para 0.48.

· Arquivo :: Localizar foi atualizado da versão 1.23 para 1.27.

· Arquivo :: Glob foi atualizado da versão 1.20 para 1.23.

· Arquivo :: Spec foi atualizado da versão 3.40 para 3.47.

· Arquivo :: Temp foi atualizado da versão 0.23 para 0.2304.

· FileCache foi atualizado da versão 1.08 para 1.09.

· Filtro :: Simples foi atualizado da versão 0.89 para 0.91.

· Filter :: Util :: Call foi atualizado da versão 1.45 para 1.49.

· Getopt :: Long foi atualizado da versão 2.39 para 2.42.

· Getopt :: Std foi atualizado da versão 1.07 para 1.10.

· Hash :: Util :: FieldHash foi atualizado da versão 1.10 para 1.15.

· HTTP :: Tiny foi atualizado da versão 0.025 para 0.043.

· I18N :: Langinfo foi atualizado da versão 0.10 para 0.11.

· I18N :: LangTags foi atualizado da versão 0.39 para 0.40.

· Se foi atualizado da versão 0.0602 para 0.0603.

· Inc :: Latest foi atualizado da versão 0.4003 para 0.4205. NOTA: inc :: mais recente é
obsoleto e pode ser removido de uma versão futura do Perl.

· O inteiro foi atualizado da versão 1.00 para 1.01.

· O IO foi atualizado da versão 1.28 para 1.31.

· IO :: Compress :: Gzip e amigos foram atualizados da versão 2.060 para 2.064.

· IPC :: Cmd foi atualizado da versão 0.80 para 0.92.

· IPC :: Open3 foi atualizado da versão 1.13 para 1.16.

· IPC :: SysV foi atualizado da versão 2.03 para 2.04.

· JSON :: PP foi atualizado da versão 2.27202 para 2.27203.

· List :: Util foi atualizado da versão 1.27 para 1.38.

· Locale foi atualizado da versão 1.02 para 1.03.

· Locale :: Codes foi atualizado da versão 3.25 para 3.30.

· Locale :: Maketext foi atualizado da versão 1.23 para 1.25.

· Math :: BigInt foi atualizado da versão 1.9991 para 1.9993.

· Math :: BigInt :: FastCalc foi atualizado da versão 0.30 para 0.31.

· Math :: BigRat foi atualizado da versão 0.2604 para 0.2606.

· MIME :: Base64 foi atualizado da versão 3.13 para 3.14.

· Módulo :: Build foi atualizado da versão 0.4003 para 0.4205. NOTA: Módulo :: Build é
obsoleto e pode ser removido de uma versão futura do Perl.

· Module :: CoreList foi atualizado da versão 2.89 para 3.10.

· Módulo :: Carregar foi atualizado da versão 0.24 para 0.32.

· Módulo :: Carregar :: Condicional foi atualizado da versão 0.54 para 0.62.

· Módulo :: Metadados foi atualizado da versão 1.000011 para 1.000019.

· Mro foi atualizado da versão 1.11 para 1.16.

· Net :: Ping foi atualizado da versão 2.41 para 2.43.

· Opcode foi atualizado da versão 1.25 para 1.27.

· Package :: Constants foi atualizado da versão 0.02 para 0.04. NOTA:
Package :: Constants está obsoleto e pode ser removido de uma versão futura do Perl.

· Params :: Check foi atualizado da versão 0.36 para 0.38.

· Pai foi atualizado da versão 0.225 para 0.228.

· Parse :: CPAN :: Meta foi atualizado da versão 1.4404 para 1.4414.

· Perl::OSType foi atualizado da versão 1.003 para 1.007.

· Perlfaq foi atualizado da versão 5.0150042 para 5.0150044.

· PerlIO foi atualizado da versão 1.07 para 1.09.

· PerlIO :: encoding foi atualizado da versão 0.16 para 0.18.

· PerlIO :: scalar foi atualizado da versão 0.16 para 0.18.

· PerlIO :: via foi atualizado da versão 0.12 para 0.14.

· Pod :: Escapes foi atualizado da versão 1.04 para 1.06.

· Pod :: Functions foi atualizado da versão 1.06 para 1.08.

· Pod :: Html foi atualizado da versão 1.18 para 1.21.

· Pod :: Parser foi atualizado da versão 1.60 para 1.62.

· Pod :: Perldoc foi atualizado da versão 3.19 para 3.23.

· Pod :: Usage foi atualizado da versão 1.61 para 1.63.

· POSIX foi atualizado da versão 1.32 para 1.38_03.

· Re foi atualizado da versão 0.23 para 0.26.

· O Safe foi atualizado da versão 2.35 para 2.37.

· Scalar :: Util foi atualizado da versão 1.27 para 1.38.

· SDBM_File foi atualizado da versão 1.09 para 1.11.

· O soquete foi atualizado da versão 2.009 para 2.013.

· Storable foi atualizado da versão 2.41 para 2.49.

· Strict foi atualizado da versão 1.07 para 1.08.

· Subs foi atualizado da versão 1.01 para 1.02.

· Sys :: Hostname foi atualizado da versão 1.17 para 1.18.

· Sys :: Syslog foi atualizado da versão 0.32 para 0.33.

· Term :: Cap foi atualizado da versão 1.13 para 1.15.

· Term :: ReadLine foi atualizado da versão 1.12 para 1.14.

· Test :: Harness foi atualizado da versão 3.26 para 3.30.

· Test :: Simple foi atualizado da versão 0.98 para 1.001002.

· Text :: ParseWords foi atualizado da versão 3.28 para 3.29.

· Texto :: Tabs foi atualizado da versão 2012.0818 para 2013.0523.

· Text :: Wrap foi atualizado da versão 2012.0818 para 2013.0523.

· Thread foi atualizado da versão 3.02 para 3.04.

· Thread :: Queue foi atualizado da versão 3.02 para 3.05.

· Threads foram atualizados da versão 1.86 para 1.93.

· Threads :: shared foi atualizado da versão 1.43 para 1.46.

· Tie :: Array foi atualizado da versão 1.05 para 1.06.

· Tie :: File foi atualizado da versão 0.99 para 1.00.

· Tie :: Hash foi atualizado da versão 1.04 para 1.05.

· Tie :: Scalar foi atualizado da versão 1.02 para 1.03.

· Tie :: StdHandle foi atualizado da versão 4.3 para 4.4.

· Time :: HiRes foi atualizado da versão 1.9725 para 1.9726.

· Time :: Piece foi atualizado da versão 1.20_01 para 1.27.

· Unicode :: Collate foi atualizado da versão 0.97 para 1.04.

· Unicode :: Normalize foi atualizado da versão 1.16 para 1.17.

· Unicode :: UCD foi atualizado da versão 0.51 para 0.57.

· Utf8 foi atualizado da versão 1.10 para 1.13.

· A versão foi atualizada da versão 0.9902 para 0.9908.

· Vmsish foi atualizado da versão 1.03 para 1.04.

· Avisos foram atualizados da versão 1.18 para 1.23.

· Win32 foi atualizado da versão 0.47 para 0.49.

· XS :: Typemap foi atualizado da versão 0.10 para 0.13.

· O XSLoader foi atualizado da versão 0.16 para 0.17.

Documentação


Novo Documentação
perlrepositório

Este documento foi removido (na verdade, renomeado como perlgit e recebeu uma grande revisão) no Perl
v5.14, fazendo com que sites de documentação Perl mostrem a versão agora desatualizada em Perl
v5.12 como a versão mais recente. Agora foi restaurado em forma de esboço, direcionando os leitores para
informações atuais.

Alterações para Existente Documentação
dados perl

· Novas seções foram adicionadas para documentar a nova fatia da matriz de índice / valor e chave / valor
sintaxe de divisão de hash.

perldebguts

· As sub-rotinas do depurador "DB :: goto" e "DB :: lsub" agora estão documentadas. [perl # 77680]

perlexperimento

· A correspondência "\ s" com "\ cK" está marcada como experimental.

· Ithreads foram aceitos na v5.8.0 (mas não são recomendados a partir da v5.20.0).

· Dobras longas não são consideradas experimentais.

· Codifique em expressões regulares, verbos de retrocesso de expressão regular e lvalue
as sub-rotinas não são mais listadas como experimentais. (Isso também afeta perlre e
perlsub.)

perlfunc

· "Cortar" e "chomp" agora observe que eles podem redefinir o iterador de hash.

· O tratamento de argumentos de "exec" agora está mais claramente documentado.

· "Eval EXPR" agora tem advertências sobre a expansão de números de ponto flutuante em alguns locais.

· "Goto EXPR" agora está documentado para lidar com uma expressão que avalia para um código
referência como se fosse "goto & $ coderef". Esse comportamento tem pelo menos dez anos.

· Desde Perl v5.10, é possível que sub-rotinas em @INC retornem uma referência
para um escalar contendo o código-fonte inicial para anexar ao arquivo. Isto é agora
Documentada.

· A documentação de "ref" foi atualizada para recomendar o uso de "abençoado", "isa"
e "reftype" ao lidar com referências a objetos abençoados.

perlguts

· Numerosas pequenas mudanças foram feitas para refletir as mudanças feitas nos componentes internos do perl
esta liberação.

· Novas seções em Valores somente leitura e Cópia na gravação foram adicionadas.

perlhack

· A seção Super Quick Patch Guide foi atualizada.

dicas

· A documentação foi atualizada para incluir mais alguns exemplos de uso do "gdb".

alertar

· A documentação perllexwarn usada para descrever a hierarquia das categorias de aviso
entendido pelo pragma de advertências. Essa descrição foi movida para os avisos
documentação em si, deixando perllexwarn como um esboço que aponta para ele. Esta mudança
consolida toda a documentação para avisos lexicais em um único lugar.

perlocal

· A documentação agora menciona fc () e "\ F", e inclui muitos esclarecimentos e
correções em geral.

perlo

· O projeto da linguagem Perl sempre exigiu operadores monomórficos. Isto é agora
mencionado explicitamente.

perlopentut

· O tutorial "aberto" foi completamente reescrito por Tom Christiansen, e agora se concentra
em cobrir apenas o básico, em vez de fornecer uma referência abrangente a todos
coisas que podem ser abertas. Esta reescrita veio como resultado de uma vigorosa discussão sobre
perl5-porters iniciado por um conjunto de melhorias escritas por Alexander Hartmaier para
o perlopentut existente. Um documento "mais do que você jamais desejou saber" sobre "abrir" "
pode seguir em versões subseqüentes de perl.

Perlre

· O fato de que o mecanismo regexp não faz nenhum esforço para chamar construções (? {}) E (?? {})
qualquer número especificado de vezes (embora seja basicamente DWIM no caso de um
correspondência) foi documentado.

· O modificador "/ r" (para substituição não destrutiva) agora está documentado. [perl # 119151]

· A documentação para "/ x" e "(? # Comentário)" foi expandida e esclarecida.

perlreguts

· A documentação foi atualizada à luz das mudanças recentes para regcomp.c.

perlsub

· A necessidade de pré-declarar funções recursivas com protótipos para o protótipo
para ser homenageado na chamada recursiva agora está documentado. [perl # 2726]

· Uma lista de nomes de sub-rotinas usados ​​pela implementação de perl agora está incluída. [perl
# 77680]

perlttrap

· Agora existe uma seção JavaScript.

perlunicocódigo

· A documentação foi atualizada para refletir as alterações de "Bidi_Class" no Unicode 6.3.

Perlvar

· Uma nova seção explicando os problemas de desempenho de $ `, $ & e $ ', incluindo
soluções alternativas e mudanças em diferentes versões do Perl foram adicionadas.

· Três nomes de variáveis ​​em inglês que foram documentados há muito tempo, mas não existem de fato
foram removidos da documentação. Estes eram $ OLD_PERL_VERSION, $ OFMT e
$ ARRAY_BASE.

(Na verdade, "OLD_PERL_VERSION" parece existem, começando com esta revisão, mas permaneceram
indocumentado até perl 5.22.0.)

perlxs

· Vários problemas no exemplo "MY_CXT" foram corrigidos.

Diagnóstico


As seguintes adições ou alterações foram feitas na saída de diagnóstico, incluindo avisos
e mensagens de erro fatais. Para obter a lista completa de mensagens de diagnóstico, consulte perldiag.

Novo Diagnóstico
Novo erros

· O argumento de exclusão é a fatia da matriz de índice / valor, use a fatia da matriz

(F) Você usou a sintaxe de fatia da matriz de índice / valor (% array [...]) como o argumento para "excluir".
Você provavelmente quis dizer @array [...] com um símbolo @ em vez disso.

· O argumento de exclusão é uma fatia de hash de chave / valor, use uma fatia de hash

(F) Você usou a sintaxe de divisão de hash de chave / valor (% hash {...}) como o argumento para "excluir".
Você provavelmente quis dizer @hash {...} com um símbolo @ em vez disso.

· Constantes de lista mágica não são suportadas

(F) Você atribuiu um array mágico a um elemento stash e, em seguida, tentou usar o
sub-rotina do mesmo slot. Você está pedindo ao Perl para fazer algo que ele não pode fazer,
detalhes sujeitos a mudanças entre as versões do Perl.

· A configuração $ / adicionada a uma referência% s é proibida

Novo Advertências

·% S na referência é experimental:

O recurso "autoderef" é experimental.

A partir da v5.14.0, era possível usar push, pop, keys e outros
funções não apenas em tipos agregados, mas em referências a eles. O recurso não era
implantado para sua especificação original pretendida, e agora pode se tornar redundante para
desreferenciação postfix. Sempre foi categorizado como um recurso experimental e
na v5.20.0 traz um aviso como tal.

Os avisos agora serão emitidos em tempo de compilação, quando essas operações forem detectadas.

não se $]> = 5.01908, avisos => "experimental :: autoderef";

Considere, no entanto, substituir o uso desses recursos, pois eles podem alterar o comportamento
novamente antes de se tornar estável.

· Uma sequência de vários espaços em uma definição de alias de charnames foi descontinuada

O espaço em branco à direita em uma definição de alias de charnames foi descontinuado

Esses dois avisos de depreciação envolvendo "\ N {...}" foram implementados incorretamente. Elas
não avisou por padrão (agora eles avisam) e não pode ser tornado fatal por meio de "avisos de uso
FATAL => 'obsoleto' "(agora eles podem).

· O protótipo de atributo (% s) descarta o atributo de protótipo anterior no mesmo sub

(W misc) Um sub foi declarado como "sub foo: prototype (A): prototype (B) {}", para
exemplo. Uma vez que cada sub pode ter apenas um protótipo, as declarações anteriores são
descartado enquanto o último é aplicado.

· Caractere \ 0 inválido em% s para% s:% s \ 0% s

(W syscalls) Caracteres \ 0 incorporados em nomes de caminho ou outros argumentos de chamada de sistema
produzir um aviso a partir de 5.20. As partes após o \ 0 eram anteriormente ignoradas pelo sistema
chamadas.

· Ponto de código não Unicode correspondente 0x% X em relação à propriedade Unicode; pode não ser portátil.

Isso substitui a mensagem "O ponto de código 0x% X não é Unicode, todas as \ p {} correspondências falham; todas
\ P {} correspondências bem-sucedidas ".

· Faltando ']' no protótipo para% s:% s

(W ilegalproto) Um agrupamento foi iniciado com "[", mas nunca fechado com "]".

· Possível problema de precedência com o operador de fluxo de controle

(Sintaxe W) Há um possível problema com a mistura de um operador de fluxo de controle
(por exemplo, "return") e um operador de baixa precedência como "ou". Considerar:

sub {return $ a ou $ b; }

Isso é analisado como:

sub { (retorna $a) ou $b; }

O que é efetivamente apenas:

sub {return $ a; }

Use parênteses ou a variante de alta precedência do operador.

Observe que isso também pode ser acionado para construções como:

sub {1 se morrer; }

· A desreferenciação Postfix é experimental

(S experimental :: postderef) Este aviso é emitido se você usar o experimental
sintaxe de desreferência pós-fixada. Simplesmente suprima o aviso se quiser usar o
recurso, mas saiba que, ao fazer isso, você está correndo o risco de usar um recurso experimental
recurso que pode ser alterado ou removido em uma versão futura do Perl:

sem avisos "experimental :: postderef";
use o recurso "postderef", "postderef_qq";
$ ref -> $ *;
$ aref -> @ *;
$ aref -> @ [@ índices];
...etc...

· Protótipo '% s' substituído pelo atributo 'protótipo (% s)' em% s

(Protótipo W) Um protótipo foi declarado em ambos os parênteses após o subnome e
por meio do atributo prototype. O protótipo entre parênteses é inútil, pois irá
ser substituído pelo protótipo do atributo antes de ser usado.

· Valor escalar @% s [% s] melhor escrito como $% s [% s]

(Sintaxe W) No contexto escalar, você usou um índice de matriz / fatia de valor (indicado por%)
para selecionar um único elemento de uma matriz. Geralmente é melhor pedir um escalar
valor (indicado por $). A diferença é que $ foo [& bar] sempre se comporta como um
escalar, tanto no valor que retorna quanto na avaliação de seu argumento, enquanto
% foo [& bar] fornece um contexto de lista para seu subscrito, que pode fazer coisas estranhas se
você está esperando apenas um subscrito. Quando chamado no contexto da lista, ele também retorna o
índice (o que & bar retorna) além do valor.

· Valor escalar @% s {% s} melhor escrito como $% s {% s}

(Sintaxe W) No contexto escalar, você usou uma chave hash / fatia de valor (indicada por%) para
selecione um único elemento de um hash. Geralmente é melhor pedir um valor escalar
(indicado por $). A diferença é que $ foo {& bar} sempre se comporta como um escalar,
tanto no valor que retorna e ao avaliar seu argumento, enquanto @foo {& bar} e
fornece um contexto de lista para seu subscrito, o que pode fazer coisas estranhas se você
esperando apenas um subscrito. Quando chamado no contexto da lista, ele também retorna a chave em
além do valor.

· Definir $ / como uma referência a% s como uma forma de slurp está obsoleto, tratando como undef

· Saída inesperada% u

Diversidade, Igualdade e Compromisso para com a Sociedade Saída() foi chamado ou o script terminou normalmente quando
"PERL_EXIT_WARN" foi definido em "PL_exit_flags".

· Falha de saída inesperada% d

(S) Um não capturado morrer () foi chamado quando "PERL_EXIT_WARN" foi definido em "PL_exit_flags".

· O uso de caracteres de controle literais em nomes de variáveis ​​foi descontinuado

(D obsoleto) Usando caracteres de controle literais na fonte para se referir a ^ FOO
variáveis, como $ ^ X e $ {^ GLOBAL_PHASE} agora estão obsoletas. Isso afeta apenas o código
como $ \ cT, onde \ cT é um controle (como um "SOH") no código-fonte: $ {"\ cT"} e $ ^ T
permanecem válidos.

· Uso inútil do modificador de ganância

Isso corrige [Perl # 42957].

Alterações para Existente Diagnóstico
· Avisos e erros do mecanismo regexp agora são UTF-8 limpos.

· A mensagem de erro "Condição de switch desconhecida" tem algumas pequenas alterações. Esse erro
dispara quando há uma condição desconhecida em uma condicional "(? (foo))". O erro
mensagem usada para ler:

Condição de switch desconhecida (? (% S em regex;

Mas o que% s poderia ser dependia principalmente da sorte. Para "(? (Foobar))", você deve ter visto
"fo" ou "f". Para caracteres Unicode, geralmente você obteria uma string corrompida. O
mensagem foi alterada para ler:

Condição de switch desconhecida (? (...)) em regex;

Além disso, o marcador '<- AQUI' no erro agora apontará para o local correto em
o regex.

· O aviso "% s" \ x% X "não mapeia para Unicode" agora está listado corretamente como um grave
aviso em vez de um erro fatal.

· Em raras circunstâncias, pode-se obter uma mensagem "Não é possível forçar REF somente leitura à string"
em vez do habitual "Modificação de um valor somente leitura". Este erro alternativo
mensagem foi removida.

· "Uso ambíguo de * resolvido como operador *": Este e avisos semelhantes sobre "%" e
"&" costumava ocorrer em algumas circunstâncias onde não havia operador do tipo citado,
então o aviso estava completamente errado. Isso foi corrigido [perl # 117535, # 76910].

· Avisos sobre protótipos de sub-rotina malformados são agora mais consistentes em como o
protótipos são renderizados. Alguns desses avisos truncariam protótipos contendo
nulos. Em outros casos, um aviso suprimiria outro. O aviso sobre ilegal
personagens em protótipos não dizem mais "depois de '_'" se o personagem ruim veio antes
o sublinhado.

· As regras de dobramento Perl não estão atualizadas para 0x% X; por favor, use o utilitário perlbug para
relatório; em regex; marcado por <- AQUI em m /% s /

Esta mensagem agora está apenas na categoria regexp e não na categoria obsoleta.
Ainda é um aviso padrão (ou seja, grave) [perl #89648].

· %% s [% s] em contexto escalar melhor escrito como $% s [% s]

Este aviso agora ocorre para qualquer% array [$ index] ou% hash {key} conhecido por estar em escalar
contexto em tempo de compilação. Anteriormente, tinha a redação "Valor escalar %% s [% s] melhor
escrito como $% s [% s] ".

· A condição do switch não é reconhecida no regex; marcado por <- AQUI em m /% s /:

A descrição para este diagnóstico foi estendida para abranger todos os casos em que o
aviso pode ocorrer. Problemas com o posicionamento do indicador de seta também foram
resolvido.

· As mensagens de erro para "my ($ a? $ B $ c)" e "my (do {})" agora mencionam "condicional
expressão "e" do bloco ", respectivamente, em vez de ler 'Não é possível declarar nulo
operação em "meu" '.

· Quando "use re" debug "" executa um regex contendo uma referência anterior, o debugging
a saída agora mostra qual string está sendo correspondida.

· A mensagem de erro agora fatal "O caractere após" \ c "deve ser ASCII" foi reformulada
como "caractere após" \ c "deve ser ASCII imprimível" para enfatizar que em "\ cX", X
deve ser um impressão (sem controle) Caractere ASCII.

Utilidade Alterações


a2d

· Uma possível falha de um erro off-by-one ao tentar acessar antes do início
de um buffer foi corrigido. [perl # 120244]

bisect.pl

A ferramenta de bissecção git Porting / bisect.pl teve muitos aprimoramentos.

É fornecido como parte da distribuição de origem, mas não instalado porque não é
autocontido, pois depende de ser executado a partir de um checkout git. Observe também que
não faz nenhuma tentativa de consertar testes, corrigir bugs de tempo de execução ou fazer algo útil para instalar -
seu objetivo é fazer alterações mínimas para obter qualquer revisão histórica de interesse para construir
e executar o mais próximo possível de "as-was", e assim tornar "git bisect" fácil de usar.

· Opcionalmente, pode executar o caso de teste com um tempo limite.

· Agora pode ser executado no local em um checkout git limpo.

· Pode executar o caso de teste em "valgrind".

· Pode aplicar correções e patches fornecidos pelo usuário à verificação de origem antes de construir.

· Agora tem ajustes para permitir a construção de vários outros intervalos históricos de bleadperl, que
pode ser útil para identificar as origens de bugs ou mudanças de comportamento.

encontrar2perl

· Find2perl agora controla "?" curingas corretamente. [perl # 113054]

perlbug

· perlbug agora tem uma opção "-p" para anexar patches com um relatório de bug.

· Perlbug foi modificado para fornecer o modelo de relatório com terminações de linha CRLF em
Janelas. [perl # 121277 ]

· Perlbug agora faz o mínimo de suposições possíveis sobre a codificação do relatório.
Isso provavelmente mudará no futuro para assumir UTF-8 por padrão, mas permitir que um usuário
sobrepor.

Configuração e Compilação


· O Makefile.PL para SDBM_File agora gera um melhor Makefile, o que evita uma corrida
condição durante as marcas paralelas, o que pode causar a falha da compilação. Isto é o
último problema conhecido de make paralelo (em plataformas * nix) e, portanto, acreditamos que um
O make paralelo agora deve estar sempre livre de erros.

· instalador e instaladorO tratamento de opções de foi refatorado para usar Getopt :: Long.
Ambos são usados ​​pelo Makefile alvos "instalar", e não são instalados, então estes
as alterações provavelmente só afetarão os scripts de instalação personalizados.

· As opções de uma única letra agora também têm nomes longos.

· Opções inválidas agora são rejeitadas.

· Os argumentos da linha de comando que não são opções agora são rejeitados.

· Cada um agora tem uma opção "--help" para exibir a mensagem de uso.

O comportamento de todas as invocações documentadas válidas permanece inalterado.

· Sempre que possível, a construção agora evita invocações recursivas de fazer ao construir puro
Extensões Perl, sem remover qualquer paralelismo da construção. Atualmente em torno de 80
extensões podem ser processadas diretamente pelo make_ext.pl ferramenta, o que significa que 80
invocações de fazer e 160 invocações de miniperl não são mais feitos.

· O sistema de compilação agora funciona corretamente ao compilar no GCC ou Clang com tempo de link
otimização habilitada (a opção "-flto"). [perl # 113022]

· Nomes de base de biblioteca distintos com "d_libname_unique".

Ao compilar perl com esta opção, os arquivos de biblioteca para módulos XS são nomeados
algo "único" - por exemplo, Hash / Util / Util.so torna-se
Hash / Util / PL_Hash__Util.so. Este comportamento é semelhante ao que acontece atualmente em
VMS e serve como base para a porta Android.

· Opção "sysroot" para indicar o diretório raiz lógico sob gcc e clang.

Ao construir com esta opção definida, o Configure e os compiladores procuram por todos
cabeçalhos e bibliotecas neste novo sysroot, em vez de /.

Esta é uma grande economia de tempo na compilação cruzada, mas também pode ajudar em compilações nativas se
os arquivos do seu conjunto de ferramentas têm localizações fora do padrão.

· O modelo de compilação cruzada foi renovado. Existem várias opções novas e algumas
alterações incompatíveis com versões anteriores:

Agora construímos binários para miniperl e generate_uudmap para serem usados ​​no host, em vez
do que executar cada chamada miniperl no alvo; isso significa que, com exceção de 'fazer teste',
não precisamos mais acessar o sistema de destino depois que a configuração estiver concluída. Você pode fornecer
binários já construídos através das opções "hostperl" e "hostgenerate" para configurar.

Além disso, se tiver como alvo uma plataforma EBCDIC de um host ASCII ou vice-versa, você
precisa executar Configure com "-Uhostgenerate", para indicar que generate_uudmap deve
ser executado no alvo.

Finalmente, há também uma maneira de fazer o Configure terminar mais cedo, logo após a construção do
binários de host, por compilação cruzada sem especificar um "host de destino".

As mudanças incompatíveis incluem não usar mais xconfig.h, xlib ou Cross.pm, então
arquivos de configuração enlatados e Makefiles terão que ser atualizados.

· Relacionado ao acima, agora existe uma maneira de especificar a localização de sh (ou
equivalente) no sistema de destino: "targetsh".

Por exemplo, o Android tem seu sh em / system / bin / sh, portanto, se a compilação cruzada de um mais
sistema Unixy normal com sh in / Bin / sh, "targetsh" terminaria como / system / bin / sh, e
"sh" como / bin / sh.

· Por padrão, gcc 4.9 faz algumas otimizações que quebram o Perl. O -fwrapv opção
desativa essas otimizações (e provavelmente outras), então para gcc 4.3 e posterior (desde
pode haver problemas semelhantes à espreita nas versões mais antigas também, mas -fwrapv foi
quebrado antes de 4.3, e as otimizações provavelmente não irão embora), configurar agora adiciona
-fwrapv a menos que o usuário solicite -fno-wrapv, que desativa -fwrapvou
-fsanitize = undefined, o que transforma os transbordamentos -fwrapv ignora em erros de tempo de execução.
[perl # 121505 ]

Ensaios


· O make target "test.valgrind" agora permite que os testes sejam executados em paralelo. Este alvo
permite que o conjunto de testes do Perl seja executado em Valgrind, que detecta certos tipos de C
erros de programação, embora a um custo significativo em tempo de execução. Em hardware adequado,
permitindo a execução paralela garras de volta uma grande parte desse custo adicional. [perl # 121431]

· Vários testes em t / porting / não são mais ignorados quando o perl .ir diretório é
fora da árvore perl e apontado por $ GIT_DIR. [perl # 120505]

· O conjunto de testes não falha mais quando o shell interativo do usuário mantém um $ PWD
variável de ambiente, mas o / Bin / sh usado para a execução de testes, não.

Plataforma Suporte


Novo Plataformas
Android
Perl agora pode ser construído para Android, nativamente ou por meio de compilação cruzada, para
todas as três arquiteturas disponíveis atualmente (ARM, MIPS e x86), em uma ampla gama de
versões.

Bitrig
O suporte à compilação foi adicionado ao Bitrig, um fork do OpenBSD.

FreeMiNT
Foi adicionado suporte para FreeMiNT, um sistema operacional de código aberto gratuito para o sistema Atari ST e
seus sucessores, com base no MiNT original que foi oficialmente adotado pela Atari.

Synology
A Synology envia suas caixas NAS com uma distribuição Linux enxuta (DSM) a um preço relativamente barato
CPUs (como o Marvell Kirkwood mv6282 - ARMv5tel ou Freescale QorIQ P1022 ppc -
e500v2) não se destina a estações de trabalho ou desenvolvimento. Essas caixas devem ser construídas agora. O
os problemas básicos são a localização não padrão das ferramentas.

Descontinuado Plataformas
"sfio"
O código relacionado ao suporte do sistema de E / S "sfio" foi removido.

Perl 5.004 adicionou suporte para usar a API nativa de "sfio", E / S Segura / Rápida da AT&T
biblioteca. Este código ainda é construído com a v5.8.0, embora com muitos testes de regressão falhando,
mas foi inadvertidamente quebrado antes do lançamento v5.8.1, o que significa que não funcionou
em qualquer versão do Perl lançada desde então. Em mais de uma década, não recebemos nenhum bug
relatórios sobre isso, portanto, é claro que ninguém está usando essa funcionalidade em qualquer
versão do Perl que ainda é suportada em qualquer grau.

AT&T 3b1
Configure o suporte para o 3b1, também conhecido como AT&T Unix PC (e o similar AT&T
7300), foi removido.

DG / UX
DG / UX era um Unix vendido pela Data General. O último lançamento foi em abril de 2001. Apenas
é executado no próprio hardware do Data General.

EBCDIC
Na ausência de uma fonte regular de relatórios de fumaça, o código destina-se a oferecer suporte a
As plataformas EBCDIC serão removidas do perl antes de 5.22.0.

Específico da plataforma Notas
Cygwin
· recv () em um identificador conectado iria preencher o endereço do remetente retornado com
o que quer que esteja no buffer de trabalho. recv () agora usa uma solução alternativa
semelhante ao Win32 recv () wrapper e retorna uma string vazia quando recvfrom(2)
não modifica o comprimento do endereço fornecido. [perl # 118843]

· Corrigido um erro de compilação em cygwin.c no Cygwin 1.7.28.

Os testes agora lidam com os erros que ocorrem quando o "cygserver" não está sendo executado.

GNU / Hurd
A biblioteca de compatibilidade BSD "libbsd" não é mais necessária para compilações.

Linux
O arquivo de dicas agora procura "libgdbm_compat" apenas se o próprio "libgdbm" também for desejado.
O primeiro nunca é útil sem o último e, em algumas circunstâncias, incluindo
pode realmente impedir a construção.

Mac OS
O sistema de compilação agora honra uma configuração "ld" fornecida pelo usuário executando configurar.

meia-noiteBSD
"objformat" foi removido da versão 0.4-RELEASE do MidnightBSD e tinha sido
obsoleto em versões anteriores. Isso fez com que o ambiente de construção fosse erroneamente
configurado para "a.out" em vez de "elf". Isso agora foi corrigido.

Plataformas Mixed-Endian
O código que suporta as operações "empacotar" e "descompactar" em plataformas endian mistas foi
removido. Acreditamos que Perl há muito tempo não consegue construir em endian misto
arquiteturas (como PDP-11s), então não achamos que esta mudança afetará qualquer
plataformas que foram capazes de construir v5.18.0.

VMS
· O recurso "PERL_ENV_TABLES" para controlar a população de% ENV na inicialização do perl
foi quebrado no Perl 5.16.0, mas agora foi corrigido.

· Ignorar verificações de acesso em controles remotos em opendir (). [perl # 121002]

· Uma verificação de metacaracteres glob em um caminho retornado pelo operador "glob ()"
foi substituído por uma verificação de caracteres curinga VMS. Isso economiza uma significativa
número de chamadas "lstat ()" desnecessárias, de modo que algumas operações simples de glob tornam-se
60-80% mais rápido.

Win32
· "Renomear" e "vincular" no Win32 agora defina $! para ENOSPC e EDQUOT quando apropriado.
[perl # 119857]

· As opções de makefile BUILD_STATIC e ALL_STATIC para vincular alguns ou (quase) todos
extensões estaticamente (em perl520.dll e também em um perl-static.exe separado)
foram quebrados para compilações MinGW. Isso foi consertado agora.

A opção ALL_STATIC também foi aprimorada para incluir o Encode e Win32
extensões (para compilações VC ++ e MinGW).

· Suporte para construção com Visual C ++ 2013 foi adicionado. Existem atualmente dois
possíveis falhas de teste (veja "Testando Perl no Windows" em perlwin32) que irão
espero que seja resolvido em breve.

· Suporte experimental para compilar com o Intel C ++ Compiler foi adicionado. O
nmake makefile (win32 / Makefile) e o dmake makefile (win32 / makefile.mk) podem ser
usava. Um "teste nmake" não passará neste momento devido a cpan / CGI / t / url.t.

· Matar uma árvore de processo com "kill" em perlfunc e um sinal negativo, foi quebrado
começando em 5.18.0. Neste bug, "kill" sempre retornou 0 para um sinal negativo
mesmo para PIDs válidos e nenhum processo foi encerrado. Isso foi corrigido [perl
# 121230].

· O tempo necessário para construir perl no Windows foi reduzido significativamente (tempo
economias na região de 30-40% são normalmente vistas) reduzindo o número de,
geralmente falhando, chamadas de I / O para cada "require ()" (para miniperl.exe só). [perl
# 121119 ]

· Cerca de 15 minutos de repouso ocioso foram removidos da execução do "teste de fabricação" devido a um
bug no qual o monitor de tempo limite usado para testes não pode ser cancelado uma vez que o
o teste é concluído e o período de tempo limite total decorrido antes de executar o próximo teste
Arquivo. [perl # 121395 ]

· Em um perl construído sem pseudo-fork (builds pseudo-fork não foram afetados por isso
bug), matando uma árvore de processo com "kill ()" e um sinal negativo resultou em
"kill ()" invertendo o valor retornado. Por exemplo, se "kill ()" matou 1 processo
árvore PID então ele retornou 0 em vez de 1, e se "kill ()" foi passado 2 inválido
PIDs, em seguida, ele retornou 2 em vez de 0. Este provavelmente tem sido o caso desde o
O recurso de eliminação da árvore de processos foi implementado no Win32. Agora foi corrigido para
siga o comportamento documentado. [perl # 121230
]

· Ao construir um perl de 64 bits, uma memória não inicializada lida miniperl.exe, usava
durante o processo de construção, pode levar a um 4 GB wperl.exe sendo criado. Este tem
agora foi corrigido. (Observe que perl.exe em si não foi afetado, mas obviamente
wperl.exe teria sido completamente quebrado.) [perl # 121471
]

· Perl agora pode ser construído com gcc versão 4.8.1 dehttp://www.mingw.org>. Isto
foi quebrado anteriormente devido a uma definição incorreta de DllMain () em um dos perls
Arquivos Fonte. Mais cedo gcc versões também foram afetadas ao usar a versão 4 do
pacote w32api. Versões de gcc disponível a partir de
<http://mingw-w64.sourceforge.net/> não foram afetados. [perl # 121643
]

· O equipamento de teste agora não apresenta falhas quando o perl é construído em uma unidade FAT com o
Sistema operacional Windows em uma unidade NTFS. [perl # 21442
]

· Ao clonar a pilha de contexto em garfo() emulação, Perl_cx_dup () iria quebrar
acessar informações de parâmetro para entradas de pilha de contexto que não incluíam
parâmetros, como com "& foo;". [perl # 121721
]

· Apresentado por perl # 113536
, um vazamento de memória em cada
chamada para "sistema" e crases ("` `"), na maioria dos Perls Win32 a partir de 5.18.0
foi corrigido. O vazamento de memória só ocorreu se você habilitou psuedo-fork em seu
compilação do Win32 Perl e estava executando essa compilação no Server 2003 R2 ou sistema operacional mais recente.
O vazamento não aparece no WinXP SP3. [perl # 121676
]

WinCE
· A construção de módulos XS foi amplamente restaurada. Vários ainda não podem (ainda)
ser construído, mas agora é possível construir Perl no WinCE com apenas alguns
mais patches (para Socket e ExtUtils :: MakeMaker), espero que sejam incorporados
em breve.

· Perl agora pode ser construído de uma só vez, sem intervenção do usuário no WinCE, executando
"nmake -f Makefile.ce all".

O suporte para construção com EVC (Embedded Visual C ++) 4 foi restaurado. Perl pode
também pode ser construído usando dispositivos inteligentes para Visual C ++ 2005 ou 2008.

Interno Alterações


· A representação interna mudou para as variáveis ​​de correspondência $ 1, $ 2 etc., $ `, $ &,
$ ', $ {^ PREMATCH}, $ {^ MATCH} e $ {^ POSTMATCH}. Ele usa um pouco menos de memória, evita
comparações de strings e conversões numéricas durante a pesquisa e usa 23 linhas a menos de
C. Esta mudança não deve afetar nenhum código externo.

· Arrays agora usam NULL internamente para representar slots não usados, em vez de & PL_sv_undef.
& PL_sv_undef não é mais tratado como um valor especial, então av_store (av, 0, & PL_sv_undef)
fará com que o elemento 0 dessa matriz mantenha um escalar indefinido somente leitura. "$ array [0] =
qualquer coisa "será interrompida e" \ $ array [0] "será igual a" \ undef ".

· O SV retornado por HeSVKEY_force () agora reflete corretamente o UTF8ness do
chave hash subjacente quando essa chave não é armazenada como um SV. [perl # 79074]

· Certas funções e macros raramente usadas disponíveis para o código XS agora estão obsoletas.
São eles: "utf8_to_uvuni_buf" (use "utf8_to_uvchr_buf" em vez),
"valid_utf8_to_uvuni" (use "utf8_to_uvchr_buf" em vez), "NATIVE_TO_NEED" (isso fez
não funcionou corretamente de qualquer maneira) e "ASCII_TO_NEED" (isto não funcionou corretamente de qualquer maneira).

A partir desta versão, quase nunca o código do aplicativo precisa distinguir
entre o conjunto de caracteres da plataforma e Latin1, em que os 256 caracteres mais baixos de
Unicode são baseados. O novo código não deve usar "utf8n_to_uvuni" (use "utf8_to_uvchr_buf"
em vez disso), nem "uvuni_to_utf8" (use "uvchr_to_utf8" no lugar),

· Os alvos de atalho do Makefile para muitos testes e perfis raramente (ou nunca) usados
alvos foram removidos, ou fundidos no único outro alvo Makefile que usa
eles. Especificamente, esses alvos se foram, junto com a documentação que referenciava
ou explicou como usá-los:

check.terceiro check.utf16 check.utf8 coretest minitest.prep
minitest.utf16 perl.config.dashg perl.config.dashpg
perl.config.gcov perl.gcov perl.gprof perl.gprof.config
perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
perl.third perl.third.config perl.valgrind.config purecovperl
pureperl quantperl test.deparse test.taintwarn test.third
teste.tortura teste.utf16 teste.utf8 test_notty.deparse
test_notty.third test_notty.valgrind test_prep.third
test_prep.valgrind torturatest ucheck ucheck.third ucheck.utf16
ucheck.valgrind utest utest.terceiro utest.utf16 utest.valgrind

Ainda é possível executar os comandos relevantes "manualmente" - sem subjacente
funcionalidade foi removida.

· Agora é possível evitar que o Perl inicialize o tratamento de localidade. Em geral,
Perl não presta atenção à localidade. (Veja perllocale.) No entanto, até agora, em
inicialização, ele sempre inicializou o tratamento de localidade para o padrão do sistema, apenas no caso
o programa que está sendo executado acaba usando locales. (Esta é uma das primeiras coisas a
programa com reconhecimento de local deve servir, muito antes do Perl saber se será realmente necessário
ou não.) Isso funciona bem, exceto quando Perl está embutido em outro aplicativo que
deseja um local que não seja o padrão do sistema. Agora, se a variável de ambiente
"PERL_SKIP_LOCALE_INIT" é definido no momento em que Perl é iniciado, esta etapa de inicialização
é ignorado. Antes disso, em plataformas Windows, a única solução alternativa para isso
deficiência era usar uma cópia hackeada do código Perl interno. Aplicativos que precisam
para usar Perls mais antigos pode descobrir se o Perl embutido que eles estão usando precisa do
solução alternativa testando se o símbolo do pré-processador C "HAS_SKIP_LOCALE_INIT" não é
definiram. [RT # 38193]

· "BmRARE" e "BmPREVIOUS" foram removidos. Eles não foram usados ​​em qualquer lugar e não são
parte da API. Para módulos XS, eles agora são #definidos como 0.

· "Sv_force_normal", que geralmente coaxa em valores somente leitura, usado para permitir somente leitura
valores a serem modificados em tempo de compilação. Isso foi alterado para coak em somente leitura
valores independentemente. Essa mudança revelou vários bugs centrais.

· O novo mecanismo de cópia na gravação do Perl (que agora está habilitado por padrão), permite qualquer
O escalar "SvPOK" deve ser atualizado automaticamente para um escalar copy-on-write quando copiado. UMA
a contagem de referência no buffer de string é armazenada no próprio buffer de string.

Por exemplo:

$ perl -MDevel :: Peek -e '$ a = "abc"; $ b = $ a; Despejar $ a; Despejar $ b '
VS = PV(0x260cd80) at 0x2620ad8
REFCNT = 1
FLAGS = (POK, IsCOW, pPOK)
PV = 0x2619bc0 "abc" \ 0
CUR = 3
LE = 16
COW_REFCNT = 1
VS = PV(0x260ce30) at 0x2620b20
REFCNT = 1
FLAGS = (POK, IsCOW, pPOK)
PV = 0x2619bc0 "abc" \ 0
CUR = 3
LE = 16
COW_REFCNT = 1

Observe que ambos os escalares compartilham o mesmo buffer PV e têm um COW_REFCNT maior que
zero.

Isso significa que o código XS que deseja modificar o buffer "SvPVX ()" de um SV deve
chame "SvPV_force ()" ou similar primeiro, para garantir um buffer válido (e não compartilhado), e para
chamar "SvSETMAGIC()" depois. Na verdade, sempre foi assim (por exemplo,
as chaves hash já eram copiadas na gravação); esta mudança apenas espalha o comportamento do COW para um
maior variedade de SVs.

Uma diferença importante é que antes de 5.18.0, os escalares de chave hash compartilhada costumavam ter
o sinalizador "SvREADONLY" definido; este não é mais o caso.

Este novo comportamento ainda pode ser desabilitado executando configurar fazendo o melhor dos nossos
-Accflags = -DPERL_NO_COW. Esta opção provavelmente será removida no Perl 5.22.

· "PL_sawampersand" agora é uma constante. A mudança fornecida por esta variável (para
habilitar / desabilitar a cópia pré-jogo dependendo se $ & foi visto) foi
removido e substituído por cópia na gravação, eliminando alguns bugs.

O comportamento anterior ainda pode ser ativado executando configurar fazendo o melhor dos nossos
-Accflags = -DPERL_SAWAMPERSAND.

· As funções "my_swap", "my_htonl" e "my_ntohl" foram removidas. Não está claro
por que essas funções sempre foram marcadas como A, parte da API. O código XS não pode chamá-los
diretamente, pois não pode depender deles sendo compilados. Sem surpresa, nenhum código no CPAN
faz referência a eles.

· A assinatura da função regex "Perl_re_intuit_start ()" mudou; a função
O ponteiro "intuit" na estrutura do plugin do motor regex também mudou de acordo. UMA
novo parâmetro, "strbeg" foi adicionado; isso tem o mesmo significado que o de mesmo nome
parâmetro em "Perl_regexec_flags". Anteriormente, o intuit tentaria adivinhar o início de
a string do SV passado (se houver), e às vezes erraria (por exemplo, com um
SV sobrecarregado).

· A assinatura da função regex "Perl_regexec_flags ()" mudou; a função
O ponteiro "exec" na estrutura do plug-in do mecanismo regex também mudou para corresponder. O
O parâmetro "minend" agora tem o tipo "SSize_t" para oferecer melhor suporte aos sistemas de 64 bits.

· O código XS pode usar várias macros para alterar a caixa de um caractere ou ponto de código (para
exemplo "toLOWER_utf8 ()"). Apenas alguns deles foram documentados até agora; e agora
eles devem ser usados ​​em vez de chamar as funções subjacentes. Veja "Personagem
caso mudando "em perlapi.

· O código lidou de forma bastante inconsistente com uids e gids. Alguns lugares presumiram que eles
podem ser armazenados com segurança em UVs, outros em IVs, outros em int. Quatro novas macros são
introduzido: SvUID (), sv_setuid (), SvGID () e sv_setgid ()

· "Sv_pos_b2u_flags" foi adicionado à API. É semelhante a "sv_pos_b2u", mas
suporta strings longas em plataformas de 64 bits.

· "PL_exit_flags" agora pode ser usado por embedders perl ou outro código XS para ter perl "avisar"
ou "abortar" em uma tentativa de saída. [perl # 52000]

· Compilar com "-Accflags = -PERL_BOOL_AS_CHAR" agora permite que os compiladores C99 e C ++
emula o aliasing de "bool" para "char" que perl faz para compiladores C89. [perl
# 120314]

· O argumento "sv" em "sv_2pv_flags" em perlapi, "sv_2iv_flags" em perlapi,
"sv_2uv_flags" no perlapi, e "sv_2nv_flags" no perlapi e seus invólucros mais antigos
sv_2pv, sv_2iv, sv_2uv, sv_2nv, agora não é NULL. Passar NULL agora irá travar. Quando
o marcador não NULL foi introduzido em massa em 5.9.3 as funções foram marcadas como não
NULL, mas desde a criação da API SV em 5.0 alpha 2, se NULL for passado, o
funções retornaram 0 ou valores de tipo falso. O código que suporta o argumento "sv" sendo
datas não NULL para 5.0 alpha 2 diretamente e indiretamente para Perl 1.0 (pré 5.0 api). O
falta de documentação que as funções aceitavam um NULL "sv" foi corrigido na versão 5.11.0
e entre 5.11.0 e 5.19.5 as funções foram marcadas como NULLOK. Como otimização o
O código NULLOK agora foi removido e as funções tornaram-se não NULL marcadas novamente,
porque as macros principais do tipo getter nunca passam NULL para essas funções e travam
antes de passar NULL.

A única maneira de um "sv" NULL poder ser passado para funções sv_2*v* é se o código XS diretamente
chama sv_2*v*. Isso é improvável, pois o código XS usa macros Sv*V* para obter o
valor fora do SV. Uma situação possível que leva a um "sv" NULL sendo passado para
sv_2*v*, é se o código XS define suas próprias macros Sv*V* do tipo getter, que verificam
para NULO antes desreferenciando e verificando os sinalizadores do SV por meio da API pública Sv*OK*
macros ou diretamente usando a API privada "SvFLAGS", e se "sv" for NULL, chamar o
sv_2*v funciona com um literal NULL ou passando o "sv" contendo um valor NULL.

· newATTRSUB agora é uma macro

A API pública newATTRSUB era anteriormente uma macro para a função privada
Perl_newATTRSUB. A função Perl_newATTRSUB foi removida. newATTRSUB agora é macro para
uma função interna diferente.

· Alterações nos avisos gerados por "utf8n_to_uvchr()"

Esta função de nível inferior decodifica o primeiro caractere de uma string UTF-8 em um código
ponto. É acessível ao código de nível "XS", mas é desencorajado de usá-lo
diretamente. Existem funções de nível superior que chamam isso que devem ser usadas
em vez disso, como "utf8_to_uvchr_buf" em perlapi. Para completar, porém, este
documenta algumas mudanças nele. Agora, os testes para malformações são feitos antes de qualquer teste
para outros problemas potenciais. Um desses problemas envolve pontos de código tão grandes que
eles nunca apareceram em nenhum padrão oficial (o padrão atual foi escalado
de volta o ponto de código mais alto aceitável de versões anteriores). É possível (embora
não feito no CPAN) para avisar e/ou proibir esses pontos de código, aceitando
pontos de código que ainda estão acima do máximo legal do Unicode. A mensagem de aviso para
isso agora inclui o ponto de código se representável na máquina. Anteriormente,
sempre exibia bytes brutos, que é o que ainda faz para código não representável
pontos.

· Alterações do mecanismo Regexp que afetam a interface do mecanismo regex conectável

Muitos sinalizadores que costumavam ser expostos via regexp.h e usados ​​para preencher os extflags
membro de struct regexp foram removidos. Esses campos eram tecnicamente privados para
O próprio mecanismo regexp do Perl e não deveria ter sido exposto lá em primeiro lugar.

As bandeiras afetadas são:

RXf_NOSCAN
RXf_CANY_SEEN
RXf_GPOS_SEEN
RXf_GPOS_FLOAT
RXf_ANCH_BOL
RXf_ANCH_MBOL
RXf_ANCH_SBOL
RXf_ANCH_GPOS

Bem como as seguintes máscaras de bandeira:

RXf_ANCH_SINGLE
RXf_ANCH

Todos foram renomeados para equivalentes PREGf_ e movidos para regcomp.h.

O comportamento obtido anteriormente definindo um ou mais dos sinalizadores RXf_ANCH_ (via
a máscara RXf_ANCH) agora foram substituídas por um bit de flag *single* em extflags:

RXf_IS_ANCHORED

mecanismos regex conectáveis ​​que anteriormente costumavam definir esses sinalizadores agora devem definir isso
bandeira SOZINHO.

· O núcleo Perl agora usa consistentemente "av_tindex()" ("o índice superior de um array") como um
sinônimo mais claramente nomeado para "av_len()".

· Espera-se que a variável interpretadora obscura "PL_timesbuf" seja removida no início do
5.21.x, para que o Perl 5.22.0 não forneça aos autores XS.
Enquanto a variável ainda existir em 5.20.0, esperamos que este aviso prévio do
a depreciação ajudará qualquer pessoa que esteja usando essa variável.

Selecionado Bug Correções


Regular Expressões
· Corrigido um pequeno número de construções regexp que poderiam não corresponder ou travar
perl quando a string que está sendo correspondida foi alocada acima da linha de 2 GB em 32 bits
sistemas. [RT # 118175]

· Vários vazamentos de memória envolvendo a análise da expressão regular "(?[...])"
construção foram corrigidos.

· "(?[...])" agora permite a interpolação de padrões pré-compilados consistindo em "(?[...])"
com classes de caracteres entre colchetes ("$pat = qr/(?[ [a] ])/; /(?[ $pat ])/").
Anteriormente, os colchetes confundiriam o analisador de expressão regular.

· A mensagem de aviso "Quantificador inesperado na expressão de comprimento zero" pode aparecer
duas vezes começando em Perl v5.10 para uma expressão regular também contendo alternâncias
(por exemplo, "a|b") acionando a otimização de trie.

· Perl v5.18 inadvertidamente introduziu um bug através do qual interpolando misturado para cima e para baixo
strings UTF-8 graduadas em uma regex podem resultar em UTF-8 malformado no padrão:
especificamente se um caractere rebaixado no intervalo "\ x80 .. \ xff" seguiu um UTF-8
string, por exemplo

utf8 :: upgrade (meu $ u = "\ x {e5}");
utf8 :: downgrade (meu $ d = "\ x {e5}");
/ $ u $ d /

[RT#118297]

· Em expressões regulares contendo vários blocos de código, os valores de $1, $2, etc.,
definido por chamadas de expressão regular aninhadas vazaria de um bloco para o outro. Agora
essas variáveis ​​sempre se referem à expressão regular externa no início de uma
bloco incorporado [perl #117917].

· "/$qr/p" foi quebrado em Perl 5.18.0; o sinalizador "/p" foi ignorado. Isso foi corrigido.
[perl # 118213]

· A partir do Perl 5.18.0, uma construção como "/[#](?{})/x" teria seu "#" incorretamente
interpretado como um comentário. O bloco de código seria ignorado e não analisado. Isto tem sido
corrigido.

· A partir do Perl 5.001, uma expressão regular como "/[#$a]/x" ou "/[#]$a/x" teria
seu "#" incorretamente interpretado como um comentário, portanto, a variável não interpolaria.
Isso foi corrigido. [perl #45667]

· Perl 5.18.0 inadvertidamente fez expressões regulares desreferenciadas ("${ qr// }") falsas como
booleanos. Isso foi corrigido.

· O uso de "\G" em expressões regulares, onde não está no início do padrão, é
agora um pouco menos bugado (embora ainda seja um pouco problemático).

· Onde uma expressão regular inclui blocos de código ("/(?{...})/"), e onde o uso de
sobrecarga constante desencadeou uma recompilação do bloco de código, o segundo
compilação não viu seu escopo léxico externo. Esta foi uma regressão em Perl 5.18.0.

· A posição da string definida por "pos" pode mudar se a representação da string for alterada
internamente para ou de utf8. Isso pode acontecer, por exemplo, com referências a objetos com
sobrecarga de strings.

· Tomando referências aos valores de retorno de duas chamadas "pos" com o mesmo argumento, e
em seguida, atribuir uma referência a um e "undef" ao outro, pode resultar em afirmação
falhas ou vazamentos de memória.

· Elementos de @- e @+ agora são atualizados corretamente quando se referem a capturas inexistentes.
Anteriormente, um elemento referenciado ("$ref = \$-[1]") poderia se referir à correspondência errada
após as partidas subsequentes.

· O código que analisa backrefs regex (ou backrefs/octais ambíguos) como \123 fez um
simples atoi (), que poderia envolver valores negativos em strings de dígitos longos e
causar falhas de segmentação. Isso foi consertado agora. [perl #119505]

· Atribuir outro typeglob a "*^R" não torna mais o mecanismo de expressão regular
batida.

· A expressão regular "\N" escapa, quando usada sem as chaves (para significar
"[^\n]"), estava ignorando um "*" seguinte se seguido por um espaço em branco em /x. Tinha
tem sido assim desde que "\N" para significar "[^\n]" foi introduzido em 5.12.0.

· "s///", "tr///" e "y///" agora funcionam quando um caractere largo é usado como delimitador.
[perl # 120463]

· Alguns casos de sequências não terminadas (?...) em expressões regulares (por exemplo, "/(?
foram corrigidos para produzir a mensagem de erro adequada em vez de "pânico: quebra de memória".
Outros casos (por exemplo, "/(?(/") ainda precisam ser corrigidos.

· Quando uma referência a uma referência a um objeto sobrecarregado foi retornada de um
expressão "(??{...})" bloco de código, uma desreferência implícita incorreta pode ocorrer
se a referência interna tiver sido retornada por um bloco de código anteriormente.

· Uma variável vinculada retornada de "(??{...})" vê os valores internos das variáveis ​​de correspondência
(ou seja, o $ 1 etc. de qualquer correspondência dentro do bloco) em seu método FETCH. Isso foi
não é o caso se uma referência a um objeto sobrecarregado foi a última coisa atribuída ao
variável vinculada. Em vez disso, as variáveis ​​de correspondência se referem ao padrão externo durante o
Chamada BUSCA.

· Corrige contaminação inesperada via regexp usando locale. Anteriormente, sob certas condições,
o uso de classes de caracteres pode causar contaminação quando não deveria. Algum personagem
as classes são dependentes da localidade, mas antes deste patch, às vezes, a corrupção estava acontecendo
mesmo para classes de caracteres que não dependem da localidade. [perl #120675]

· Sob certas condições, Perl lançaria um erro se em uma declaração lookbehind em um
regexp, a asserção se referia a um subpadrão nomeado, reclamando que o lookbehind era
variável quando não era. Isso foi corrigido. [perl #120600], [perl #120618]. O
correção atual pode ser melhorada no futuro.

· $^R não estava disponível fora da expressão regular que o inicializou. [perl
# 121070]

· Um grande conjunto de correções e refatoração para re_intuit_start() foi mesclado, os destaques
são:

· Corrigido um pânico ao compilar a expressão regular "/\x{100}[xy]\x{100}{2}/".

· Corrigida uma regressão de desempenho ao realizar uma correspondência de padrão global em relação a um
Cadeia de caracteres UTF-8. [perl #120692]

· Corrigido outro problema de desempenho em que a correspondência de uma expressão regular como
"/ab.{1,2}x/" em uma string UTF-8 longa calcularia byte desnecessariamente
deslocamentos para uma grande parte da string. [perl #120692]

· Corrigido um erro de alinhamento ao compilar expressões regulares quando construído com GCC em HP-
UX 64 bits.

· Em plataformas de 64 bits, "pos" agora pode ser definido para um valor superior a 2**31-1. [perl
# 72766]

Perl 5 Debugger e -d
· O comando "man" do depurador foi corrigido. Ele foi quebrado na versão v5.18.0. o
O comando "man" tem como apelido os nomes "doc" e "perldoc" - todos agora funcionam novamente.

· @_ agora está corretamente visível no depurador, corrigindo uma regressão introduzida em
depurador da v5.18.0. [RT # 118169]

· Em compilações copy-on-write (o padrão em 5.20.0) "${'_<-e'}[0]" não é mais
mutilado. Esta é a primeira linha de entrada salva para uso do depurador para one-liners
[perl # 118627].

· Em compilações não encadeadas, definindo "${"_
faz com que "__FILE__" e algumas mensagens de erro produzam uma string corrompida e não
impede que as diretivas "#line" em evals de string forneçam as linhas de origem para o
depurador. As compilações encadeadas não foram afetadas.

· A partir do Perl 5.12, os números de linha estavam desajustados por um se o -d interruptor foi usado no
#! linha. Agora eles estão corretos.

· "*DB::DB = sub {} if 0" não impede mais que o modo de depuração do Perl encontre "DB::DB"
subs declarados posteriormente.

· Os hashes "%{'_<...'}" agora definem pontos de interrupção no "@{'_<...'}" correspondente em vez de
qualquer array ao qual @DB::dbline é alias. [perl #119799]

· Chame set-magic ao configurar $DB::sub. [perl #121255]

· O comando "n" do depurador agora respeita as sub-rotinas lvalue e passa por cima delas [perl
# 118839].

Lexical Sub-rotinas
· Constantes lexicais ("my sub a () {42}") não travam mais quando embutidas.

· Protótipos de parâmetros anexados a sub-rotinas lexicais agora são respeitados durante a compilação
sub chamadas sem parênteses. Anteriormente, os protótipos eram homenageados apenas por
chamadas fazendo o melhor dos nossos parênteses. [RT # 116735]

· Erros de sintaxe em sub-rotinas lexicais em combinação com chamadas para as mesmas sub-rotinas
não causa mais travamentos em tempo de compilação.

· Avisos de recursão profunda não causam mais falhas em sub-rotinas lexicais. [RT # 118521]

· O teste de subentrada dtrace agora funciona com subs lexicais, em vez de travar [perl
# 118305].

· A indefinição de uma sub-rotina lexical inlinável ("my sub foo () {42} undef & foo") iria
resultará em uma falha se os avisos estiverem ativados.

· Um sub léxico indefinido usado como um método herdado não trava mais.

· A presença de um sub léxico chamado "CORE" não interrompe mais o prefixo CORE:: de
trabalhando.

Tudo Outro
· O código de alocação de OP agora retorna a memória alinhada corretamente em todos os casos para "estrutura
pmop ". Anteriormente, ele podia retornar a memória apenas alinhada a um limite de 4 bytes, que é
não correto para um ithreads construído com IVs de 64 bits em algumas plataformas de 32 bits. Notavelmente,
isso fez com que a compilação falhasse completamente no sparc GNU / Linux. [RT # 118055]

· Avaliar grandes hashes em contexto escalar agora é muito mais rápido, pois o número de hashes usados
chains no hash agora é armazenado em cache para hashes maiores. Hashes menores continuam a não
armazená-lo e calculá-lo quando necessário, pois isso economiza um IV. Isso seria 1 IV
sobrecarga para cada objeto construído a partir de um hash. [RT #114576]

· Perl v5.16 introduziu inadvertidamente um bug em que chamadas para XSUBs que não eram visíveis
em tempo de compilação eram tratados como lvalues ​​e podiam ser atribuídos a, mesmo quando o
subrotina não era uma sub lvalue. Isso foi corrigido. [RT#117947]

· Em Perl v5.18.0 dualvars que tinham uma string vazia para a parte da string, mas uma diferente de zero
número para a parte do número começando sendo tratado como verdadeiro. Nas versões anteriores eles
foram tratados como falsos, a representação de string tendo precedência. O velho
comportamento foi restaurado. [RT #118159]

· Desde Perl v5.12, inlining de constantes que substituem palavras-chave internas do mesmo
name havia revogado "use subs", causando menções subsequentes da constante para usar
a palavra-chave embutida em vez disso. Isso foi corrigido.

· O aviso produzido por "-l $handle" agora se aplica a IO refs e globs, não apenas a
glob refs. Esse aviso agora também está limpo em UTF8. [RT #117595]

· "excluir $ENV local{nonexistente_env_var}" não vaza mais memória.

· "sort" e "require" seguidos por uma palavra-chave prefixada com "CORE::" agora trate-o como um
palavra-chave, e não como uma sub-rotina ou nome de módulo. [RT #24482]

· Através de alguns enigmas, é possível liberar o pacote atual.
Certos operadores ("bless", "reset", "open", "eval") não conseguiam lidar e travavam.
Eles se tornaram mais resistentes. [RT #117941]

· O alias de filehandles por meio de atribuição de glob a glob não atualizaria o método interno
caches corretamente se um pacote com o mesmo nome que o filehandle existia, resultando em
chamadas de método filehandle indo para o pacote em vez disso. Isso foi corrigido.

· "./Configure -de -Dusevendorprefix" não é padrão. [RT #64126]

· O aviso "Declaração improvável de ser alcançada" foi listado no perldiag como um
Aviso da categoria "exec", mas foi habilitado e desabilitado pela categoria "sintaxe". Sobre
por outro lado, a categoria "executivo" controlava sua fatalidade. Agora é inteiramente
tratado pela categoria "exec".

· O aviso "Lista de substituição é maior que a lista de pesquisa" para "tr///" e "y///" não
mais ocorre na presença do sinalizador "/c". [RT #118047]

· Stringification de NVs não são armazenados em cache para que a localidade lexical controle
stringificação do ponto decimal. [perl #108378] [perl #115800]

· Houve várias correções relacionadas ao tratamento de localidades do Perl. perl #38193 era
descrito acima em "Mudanças Internas". Também corrigido é #118197, onde a raiz
(ponto decimal) tinha que ser um caractere ASCII (o que não funciona para alguns
línguas não ocidentais); e #115808, em que "POSIX::setlocale()" em caso de falha retornado
um "undef" que não avisava sobre não ser definido, mesmo que esses avisos fossem
ativado.

· Compilando um operador "split" cujo terceiro argumento é uma constante nomeada avaliada em 0
não faz mais com que o valor da constante mude.

· Uma constante nomeada usada como segundo argumento para "índice" não é mais forçada a um
string se for uma referência, expressão regular, dualvar, etc.

· Uma constante nomeada avaliando o valor indefinido usado como o segundo argumento para
"index" não produz mais avisos "não inicializados" em tempo de compilação. Ainda vai
produzi-los em tempo de execução.

· Quando um escalar foi retornado de uma sub-rotina em @INC, o escalar referenciado foi
magicamente convertido em uma coisa de IO, possivelmente resultando em erros de "cópia bizarra" se
esse escalar continuou a ser usado em outros lugares. Agora Perl usa uma cópia interna do
escalar em vez disso.

· Certos usos do operador "sort" são otimizados para modificar uma matriz no local, como
"@a = classificar @a". Durante a ordenação, o array se torna somente leitura. Se um bloco de classificação
deve acontecer de morrer, então o array permaneceu somente leitura mesmo fora do "sort". Isto
foi corrigido.

· $a e $b dentro de um bloco de classificação são alias para os argumentos reais para "classificar", então eles
pode ser modificado através dessas duas variáveis. Isso nem sempre funcionou, por exemplo, para
lvalue subs e $#ary, e provavelmente muitos outros operadores. Funciona agora.

· Os argumentos para "classificar" agora estão todos no contexto de lista. Se o próprio "sort" fosse chamado
em contexto nulo ou escalar, então alguns, mas não todos os argumentos costumavam ser anulados
ou contexto escalar.

· Protótipos de sub-rotinas com caracteres Unicode acima de U+00FF estavam sendo mutilados durante
clonagem de fechamento. Isso aconteceria com sub-rotinas fechando sobre variáveis ​​lexicais
declarado fora, e com subs lexicais.

· "UNIVERSAL::can" agora trata seu primeiro argumento da mesma forma que as chamadas de método fazem:
Typeglobs e referências glob com slots de E/S não vazios são tratados como identificadores e
strings são tratadas como filehandles, em vez de pacotes, se um handle com esse nome
existe [perl #113932].

· Chamadas de método em typeglobs (por exemplo, "*ARGV->getline") usadas para stringificar o typeglob e
então procure novamente. Combinado com mudanças no Perl 5.18.0, isso permitia "*foo->bar"
para chamar métodos no pacote "foo" (como "foo->bar"). Em alguns casos pode causar
o método a ser chamado no identificador errado. Agora um argumento typeglob é tratado como um
handle (assim como "(\*foo)->bar"), ou, se seu slot de E/S estiver vazio, um erro será gerado.

· Atribuindo uma vstring a uma variável vinculada ou a um argumento de sub-rotina alias a um
hash inexistente ou elemento array agora funciona, sem achatar o vstring em um
cadeia regular.

· "pos", "tie", "tied" e "untie" não funcionaram corretamente em argumentos de sub-rotina com alias
para elementos hash e array inexistentes [perl #77814, #27010].

· O operador de seta gorda "=>" agora pode citar palavras-chave incorporadas, mesmo que ocorra no
próxima linha, tornando-a consistente com a forma como trata outras palavras simples.

· A autovivificação de um stub de sub-rotina via "\&$glob" começou a causar falhas no Perl 5.18.0
se o $glob fosse apenas uma cópia de um glob real, ou seja, um escalar que tivesse um glob
atribuído a ele. Isso foi corrigido. [perl #119051]

· Perl costumava vazar um detalhe de implementação quando se tratava de fazer referência ao retorno
valores de determinados operadores. "for ($a+$b) { warn \$_; warn \$_ }" usado para exibir dois
endereços de memória diferentes, porque o operador "\" estava copiando a variável. Debaixo
compilações encadeadas, isso também aconteceria para constantes ("for(1) { ... }"). Isso foi
fixo. [perl #21979, #78194, #89188, #109746, #114838, #115388]

· O operador de intervalo ".." estava retornando os mesmos escalares modificáveis ​​a cada chamada,
a menos que fosse a única coisa em um cabeçalho de loop "foreach". Isso significava que as mudanças de
valores dentro da lista retornada seriam visíveis na próxima vez que o operador fosse
executado. [perl #3105]

· Dobragem constante e inlining de sub-rotina não causam mais operações que
normalmente retornam novos escalares modificáveis ​​para retornar valores somente leitura.

· Fechamentos no formato "sub () { $some_variable }" não são mais embutidos, causando
alterações na variável a ser ignorada pelos chamadores da sub-rotina. [perl #79908]

· Os valores de retorno de certos operadores como "ref" às vezes seriam compartilhados entre
chamadas recursivas para a mesma sub-rotina, fazendo com que a chamada interna modifique o valor
retornado por "ref" na chamada externa. Isso foi corrigido.

· "__PACKAGE__" e constantes que retornam um nome de pacote ou chave de hash agora são consistentemente
somente leitura. Em várias versões anteriores do Perl, eles se tornaram mutáveis ​​sob certas
circunstâncias.

· Ativar avisos de "usado uma vez" não causa mais falhas nas circularidades de stash criadas
em tempo de compilação ("*Foo::Bar::Foo:: = *Foo::").

· Constantes indef usadas em chaves hash ("use constante u => undef; $h{+u}") não mais
produzir avisos "não inicializados" em tempo de compilação.

· Modificar um alvo de substituição dentro da substituição de substituição não causa mais
falha.

· A primeira instrução dentro de uma string eval costumava usar a configuração de pragma errada
às vezes durante o dobramento constante. "eval 'uc chr 0xe0'" escolheria aleatoriamente entre
Semântica Unicode, byte e localidade. Isso foi corrigido.

· A manipulação de valores de retorno de filtros @INC (sub-rotinas retornadas por sub-rotinas em
@INC) foi corrigido de várias maneiras. Variáveis ​​anteriormente vinculadas foram mal tratadas, e
definir $_ para uma referência ou typeglob pode resultar em travamentos.

· A função XS "SvPVbyte" foi corrigida para funcionar com escalares vinculados retornando
algo diferente de uma string. Ele costumava retornar utf8 nos casos em que "SvPV"
seria.

· Perl 5.18.0 inadvertidamente fez "--" e "++" travar em regular desreferenciado
expressões e impediu "++" de achatar vstrings.

· "bless" não morre mais com "Can't bless non-reference value" se seu primeiro argumento for
uma referência vinculada.

· "reset" com um argumento não pula mais escalares copy-on-write, expressões regulares,
cópias typeglob e vstrings. Além disso, ao encontrar esses valores ou somente leitura,
não pula mais nenhuma matriz ou hash com o mesmo nome.

· "reset" com um argumento agora pula escalares com alias para typeglobs ("for $z (*foo) {
reset "z" }"). Anteriormente, corrompia a memória ou travava.

· "ucfirst" e "lcfirst" não estavam respeitando o pragma de bytes. Isso foi uma regressão
de Perl 5.12. [perl #117355]

· Alterações em "UNIVERSAL::DESTROY" agora atualizam os caches DESTROY em todas as classes, em vez de
fazendo com que classes que já tiveram objetos destruídos continuem usando o antigo sub.
Esta foi uma regressão em Perl 5.18. [perl #114864]

· Todas as ocorrências de falso-positivo conhecidas do aviso de descontinuação "Useless use of '\';
não escapa do metacaractere '%c'", adicionados no Perl 5.18.0, foram removidos. [perl
# 119101]

· O valor de $^E agora é salvo em manipuladores de sinal no Windows. [perl #85104]

· Um filehandle léxico (como em "open my $fh...") geralmente recebe um nome baseado no
pacote atual e o nome da variável, por exemplo, "main::$fh". Sob recursão, o
filehandle estava perdendo a parte "$fh" do nome. Isso foi corrigido.

· Valores não inicializados retornados por XSUBs não estão mais isentos de não inicializados
avisos. [perl # 118693]

· "elsif ("")" não produz mais erroneamente um aviso sobre o contexto void. [perl
# 118753]

· Passar "undef" para uma sub-rotina agora faz com que @_ contenha o mesmo indefinido somente leitura
escalar que "undef" retorna. Além disso, "exists $_[0]" agora retornará true se
"undef" foi o primeiro argumento. [perl #7508, #109726]

· Passar um elemento de array inexistente para uma sub-rotina geralmente não o autovivifica
a menos que a sub-rotina modifique seu argumento. Isso não funcionou corretamente com
índices negativos e com elementos inexistentes no array. O elemento seria
seja vivificado imediatamente. A vivificação atrasada foi estendida para trabalhar com
Essa. [perl #118691]

· Atribuindo referências ou globs ao escalar retornado por $#foo após o array @foo ter
foi liberado não causa mais falhas de asserção em compilações de depuração e vazamentos de memória em
construções regulares.

· Em plataformas de 64 bits, grandes intervalos como 1..1000000000000 não travam mais, mas consomem
toda a sua memória em vez disso. [perl #119161]

· "__DATA__" agora coloca o identificador "DATA" no pacote correto, mesmo que o atual
pacote foi renomeado por meio de atribuição glob.

· Quando "morrer", "último", "próximo", "refazer", "ir" e "sair" desenrolar o escopo, é possível
para "DESTROY" recursivamente para chamar uma sub-rotina ou formato que está sendo
saiu. Nesse caso, às vezes as variáveis ​​léxicas dentro do sub começariam
ter valores da chamada externa, em vez de ser indefinido como deveria. Isto
foi corrigido. [perl # 119311]

· ${^MPEN} não é mais tratado como sinônimo de ${^MATCH}.

· Perl agora se esforça um pouco mais para retornar o número de linha correto em "(chamador)[2]".
[perl # 115768]

· Números de linha dentro de operadores semelhantes a aspas de várias linhas agora são relatados corretamente. [perl
# 3643]

· As diretivas "#line" dentro do código embutido em operadores semelhantes a aspas agora são respeitadas.

· Os números de linha agora estão corretos dentro do segundo here-doc quando dois marcadores here-doc
ocorrem na mesma linha.

· Uma otimização em Perl 5.18 fez suposições incorretas causando uma interação ruim com
o módulo CPAN Devel::CallParser. Se o módulo foi carregado, então as variáveis ​​léxicas
declarados em instruções separadas após uma lista "my(...)" pode não ser limpa em
saída do escopo.

· As chamadas &xsub e "goto &xsub" agora permitem que a sub-rotina chamada autovivifique elementos de
@_.

· &xsub e "goto &xsub" não travam mais se *_ estiver indefinido e não tiver entrada ARRAY
(ou seja, @_ não existe).

· &xsub e "goto &xsub" agora funcionam com @_ empatado.

· Identificadores muito longos não causam mais estouro de buffer (e travamento). Eles começaram
fazendo isso em Perl 5.18.

· O aviso "Valor escalar @hash{foo} melhor escrito como $hash{foo}" agora produz muito
menos falsos positivos. Em particular, @hash{+function_returning_a_list} e @hash{ qw
"foo bar baz" } não avisa mais. O mesmo se aplica a fatias de matriz. [perl #28380,
# 114024]

· "$! = EINVAL; waitpid(0, WNOHANG);" não entra mais em um loop infinito interno.
[perl # 85228]

· Uma possível falha de segmentação na duplicação de identificador de arquivo foi corrigida.

· Uma sub-rotina em @INC pode retornar uma referência a um escalar contendo a inicial
conteúdo do arquivo. No entanto, esse escalar foi liberado prematuramente se não for referenciado
em outro lugar, dando resultados aleatórios.

· "last" não retorna mais valores que a mesma declaração acumulou até agora, corrigindo
entre outras coisas, o bug de longa data que "push @a, last" tentaria retornar
o @a, copiando-o como um escalar no processo e resultando no erro, "Bizarre
cópia de ARRAY por último." [perl #3112]

· Em alguns casos, fechar alças de arquivo abertas para canalizar para ou de um processo, que tinha
foi duplicado em um identificador padrão, chamaria o wrapper waitpid interno do perl
com pid igual a zero. Com a correção para [perl #85228] esse pid zero foi passado para
"waitpid", possivelmente bloqueando o processo. Esta espera pelo processo zero não mais
ocorre. [perl #119893]

· "select" usado para ignorar magia no quarto argumento (timeout), levando a efeitos
como "selecionar" bloqueando indefinidamente em vez do tempo de suspensão esperado. Este tem
agora foi corrigido. [perl #120102]

· O nome da classe em "for my class $foo" agora é analisado corretamente. No caso do
segundo caractere do nome da classe sendo seguido por um dígito (por exemplo, 'a1b') usado para
dê o erro "Faltando $ na variável de loop". [perl #120112]

· Perl 5.18.0 acidentalmente desautorizou "-bareword" em "use strict" e "use integer".
Isso foi corrigido. [perl # 120288]

· "-a" no início de uma linha (ou um hífen com qualquer letra que não seja um arquivotest
operador) não produz mais um erro 'Uso de "-a" sem parênteses é
advertência ambígua. [perl #120288]

· O contexto Lvalue agora é propagado corretamente em blocos vazios e blocos "if" e "else"
em sub-rotinas lvalue. Anteriormente, matrizes e hashes às vezes eram incorretamente
achatado quando retornado no contexto da lista lvalue, ou podem ocorrer erros de "cópia bizarra".
[perl # 119797]

· O contexto Lvalue agora é propagado para as ramificações de "||" e "&&" (e seus
equivalentes alfabéticos, "ou" e "e"). Isso significa "foreach (pos $x || pos $y)
{...}" agora permite que "pos" seja modificado por meio de $_.

· "stat" e "readline" lembram o último handle usado; o primeiro para o especial "_"
filehandle, o último para "${^LAST_FH}". "eval "*foo if 0"" onde *foo foi o último
handle passado para "stat" ou "readline" pode fazer com que esse handle seja esquecido se o
maçaneta ainda não foi aberta. Isso foi corrigido.

· Vários casos de "delete $::{a}", "delete $::{ENV}" etc. causando uma falha foram
fixo. [perl #54044]

· Configurando $! para EACCESS antes de chamar "require" pode afetar o comportamento de "require".
Isso foi corrigido.

· A mensagem de aviso "Não é possível usar \1 para significar $1 na expressão" agora ocorre apenas no
parte direita (substituição) de uma substituição. Antigamente isso poderia acontecer no código
embutido no lado esquerdo, ou em qualquer outro operador semelhante a aspas.

· Bênção em uma referência ("bless $thisref, $thatref") há muito não é permitida, mas
escalares mágicos para o segundo como $/ e aqueles empatados estavam isentos. Eles não mais
são. [perl #119809]

· A bênção em uma referência foi permitida acidentalmente em 5.18 se o argumento de classe fosse
uma referência abençoada com caches de métodos obsoletos (ou seja, cuja classe teve subs definidas
desde a última chamada de método). Eles são proibidos mais uma vez, como em 5.16.

· "$x->{key}" onde $x foi declarado como "minha classe $x" não trava mais se um
O stub da sub-rotina Class::FIELDS foi declarado.

· @$obj{'key'} e "${$obj}{key}" costumavam ser isentos da verificação de campo em tempo de compilação
("Nenhum campo de classe"; veja os campos), mas não são mais.

· Um elemento de array inexistente com um índice grande passado para uma sub-rotina que liga o
array e, em seguida, tenta acessar o elemento não resulta mais em uma falha.

· Declarar um stub de sub-rotina chamado NEGATIVE_INDICES não faz mais array negativo
os índices falham quando o pacote atual é uma classe de array vinculada.

· Declarar um stub de sub-rotina "require", "glob" ou "do" no pacote CORE::GLOBAL::
não faz mais a compilação de chamadas para as funções correspondentes.

· Aliasing CORE::GLOBAL:: funções para constantes pararam de funcionar em Perl 5.10 mas
agora foi corrigido.

· Quando "`...`" ou "qx/.../" chama uma substituição de "readpipe", interpolação de aspas duplas
agora acontece, como é o caso quando não há substituição. Antes, a presença de um
substituição faria com que esses operadores semelhantes a aspas agissem como "q{}", suprimindo
interpolação. [perl #115330]

· "<<<`...`" here-docs (com backticks como delimitadores) agora chamam as substituições de "readpipe".
[perl # 119827]

· "&CORE::exit()" e "&CORE::die()" agora respeitam dicas vmsish.

· Desdefinir um glob que aciona um método DESTROY que não define o mesmo glob é agora
seguro. Ele costumava produzir avisos "Tentativa de liberar ponteiro glob não referenciado" e
memória de vazamento.

· Se a redefinição de sub-rotina ("eval 'sub foo{}'" ou "newXS" para código XS) acionar uma
DESTROY no sub que está sendo redefinido, e esse método atribui um
sub-rotina para o mesmo slot ("*foo = sub {}"), $_[0] não fica mais apontando para um
escalar liberado. Agora DESTROY está atrasado até que a nova sub-rotina seja instalada.

· No Windows, o perl não chama mais CloseHandle () em uma alça de soquete. Isto faz
depuração mais fácil no Windows removendo certas exceções irrelevantes de manipulação incorreta. Isto
também corrige uma condição de corrida que fazia funções de soquete falharem aleatoriamente em um processo Perl
com vários threads de SO e possíveis falhas de teste em
dist/IO/t/cachepropagate-tcp.t. [perl#120091/118059]

· Formatos envolvendo strings codificadas em UTF-8, ou vars estranhos como laços, sobrecargas ou
refs stringified (e em perls recentes, vars NOK puros) geralmente fariam o errado
coisa em formatos quando o var é tratado como uma string e repetidamente cortado, como em
"^<<<~~" e similares. Isso já foi resolvido. [perl
#33832/45325/113868/119847/119849/119851]

· "semctl(..., SETVAL, ...)" definiria o semáforo para os 32 bits superiores do fornecido
inteiro em vez dos 32 bits inferiores em sistemas big-endian de 64 bits. [perl #120635]

· "readdir()" agora apenas define $! em erro. $! não está mais definido como "EBADF" quando então
terminando "undef" é lido do diretório, a menos que a chamada do sistema defina $!. [perl
# 118651]

· &CORE::glob não causa mais uma falha intermitente devido à pilha do perl ficar
corrompido. [perl #119993]

· "abrir" com camadas que carregam módulos (por exemplo, "<:encoding(utf8)") não executa mais o
risco de travamento devido à corrupção da pilha.

· Perl 5.18 interrompeu o carregamento automático via chamadas de método "->SUPER::foo" procurando AUTOLOAD
do pacote atual em vez da superclasse do pacote atual. Isto tem sido
fixo. [perl #120694]

· Um bug de longa data que causa "do {} até CONSTANT", onde a constante mantém um valor verdadeiro
valor, para ler a memória não alocada foi resolvido. Isso geralmente acontece depois
um erro de sintaxe. Nas versões anteriores do Perl, ele travava intermitentemente. [perl #72406]

· Corrigir HP-UX $! fracasso. HP-UX strerror () retorna uma string vazia para um erro desconhecido
código. Isso fez com que uma asserção falhasse em compilações DEBUGGING. Agora, em vez disso, o
string retornada para "$!" contém texto indicando que o código é para um erro desconhecido.

· Elementos ligados individualmente de @INC (como em "tie $INC[0]...") agora são tratados corretamente.
Anteriormente, se um sub retornado por um elemento vinculado seria tratado como um sub
dependia se um FETCH havia ocorrido anteriormente.

· "getc" em um identificador de tamanho de byte após o mesmo operador "getc" ter sido usado em um utf8
handle usado para tratar os bytes como utf8, resultando em comportamento errático (por exemplo,
avisos UTF-8).

· Um "{" inicial no início de uma linha de argumento de formato sempre foi interpretado como
o início de um bloco anterior à v5.18. No Perl v5.18, começou a ser tratado como
um símbolo ambíguo. O analisador adivinharia se era para ser um anônimo
construtor de hash ou um bloco com base no conteúdo. Agora o comportamento anterior tem
foi restaurado. [perl #119973]

· Em Perl v5.18 "undef * _; goto & sub" e "local * _; goto & sub" começaram a travar. Esse
foi corrigido. [perl # 119949]

· Backticks (" `` " ou " qx// ") combinados com vários threads no Win32 podem resultar em
saída enviada para stdout em um thread sendo capturado por backticks de um comando externo
em outro tópico.

Isso também pode ocorrer para processos pseudo-bifurcados, pois o pseudo-fork do Win32 é
implementado em termos de threads. [perl #77672]

· "open $fh, ">+", undef" não vaza mais memória quando TMPDIR é definido, mas aponta para um
diretório em que um arquivo temporário não pode ser criado. [perl #120951]

· " for ( $h{k} || '') " não vivifica mais automaticamente $h{k}. [perl #120374]

· Em máquinas Windows, o Perl agora emula o uso POSIX do ambiente para localidade
inicialização. Anteriormente, o ambiente era ignorado. Consulte "MEIO AMBIENTE" em
perlllocale.

· Corrigido um travamento ao destruir um GLOB auto-referenciado. [perl #121242]

Conhecido Problemas


· IO::Socket é conhecido por falhar em testes no AIX 5.3. existe um remendo
no rastreador de solicitações, #120835,
que pode ser aplicado a versões futuras.

· Os seguintes módulos são conhecidos por terem falhas de teste com esta versão do Perl.
Patches foram enviados, então esperamos que haja novos lançamentos em breve:

· Dados::Estrutura::Util versão 0.15

· HTML::StripScripts versão 1.05

· Lista::Reunir versão 0.08.

Obituário


Diana Rosa, 27 anos, do Rio de Janeiro, foi para seu descanso prolongado no dia 10 de maio de 2014, junto com o
camelo de pelúcia que ela ficava pendurado na tela do computador o tempo todo. Ela era uma apaixonada
Hacker de Perl que adorava a linguagem e sua comunidade, e que nunca perdia um evento do Rio.pm.
Ela era uma verdadeira artista, uma entusiasta por escrever código, cantar árias e grafitar
paredes. Nós nunca vamos te esquecer.

Greg McCarroll morreu em 28 de agosto de 2013.

Greg era bem conhecido por muitas boas razões. Foi um dos organizadores da primeira
YAPC::Europe, que terminou com um leilão não programado onde tentou freneticamente
arrecadar dinheiro extra para evitar que a conferência tenha prejuízo. Foi Greg quem erroneamente
chegou para uma reunião london.pm com uma semana de atraso; alguns anos depois foi ele quem vendeu o
escolha da data oficial da reunião em um leilão YAPC::Europe e, eventualmente, tão glorioso
líder do london.pm ele herdou a confusão irreverente que havia criado.

Sempre prestativo, amigável e alegremente otimista, você fará falta, mas nunca
esquecido.

Agradecimentos


Perl 5.20.0 representa aproximadamente 12 meses de desenvolvimento desde Perl 5.18.0 e
contém aproximadamente 470,000 linhas de alterações em 2,900 arquivos de 124 autores.

Excluindo arquivos gerados automaticamente, documentação e ferramentas de lançamento, havia aproximadamente
280,000 linhas de alterações para arquivos 1,800 .pm, .t, .c e .h.

Perl continua a florescer em sua terceira década graças a uma vibrante comunidade de usuários
e desenvolvedores. As seguintes pessoas são conhecidas por terem contribuído para as melhorias que
tornou-se Perl 5.20.0:

Aaron Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai Alavi, Alan Hourihane,
Alexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno Siegel, Aristóteles Pagaltzis,
Arthur Axel 'fREW' Schmidt, Brad Gilbert, Brendan Byrd, Brian Childs, Brian Fraser, Brian
Gottreu, Chris 'BinGOs' Williams, Christian Millour, Colin Kuskie, Craig A. Berry, Dabrien
'Dabe' Murphy, Dagfinn Ilmari Mannsaaker, Daniel Dragan, Darin McBride, David Golden,
David Leadbeater, David Mitchell, David Nicol, David Steinbrunner, Dennis Kaarsemaker,
Dominic Hargreaves, Ed Avis, Eric Brine, Evan Zacks, Padre Chrysostomos, Florian Ragwitz,
François Perrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas, Graham Knop, H.Merijn
Brand, Hauke ​​D, Heiko Eissfeldt, Hiroo Hayashi, Hojung Youn, James E Keenan, Jarkko
Hietaniemi, Jerry D. Hedden, Jess Robinson, Jesse Luehrs, Johan Vromans, John Gardiner
Myers, John Goodyear, John P. Linderman, John Peacock, kafka, Kang-min Liu, Karen
Etheridge, Karl Williamson, Keedi Kim, Kent Fredric, Kevin Dawson, Kevin Falcone, Kevin
Ryde, Leon Timmermans, Lukas Mai, Marc Simpson, Marcel Gruenauer, Marco Peereboom, Marcus
Holland-Moritz, Mark Jason Dominus, Martin McGrath, Matthew Horsfall, Max Maischein, Mike
Doherty, Moritz Lenz, Nathan Glenn, Nathan Trapuzzano, Neil Bowers, Neil Williams,
Nicholas Clark, Niels Thykier, Niko Tyni, Olivier Mengue, Owain G. Ainsworth, Paul Green,
Paul Johnson, Peter John Acklam, Peter Martini, Peter Rabbitson, Petr PisaX, Philip
Boulain, Philip Guenther, Piotr Roszatycki, Rafael Garcia-Suarez, Reini Urban, Reuben
Thomas, Ricardo Signes, Ruslan Zakirov, Sergey Alekseev, Shirakata Kentaro, Shlomi Fish,
Slaven Rezic, Smylers, Steffen Mueller, Steve Hay, Sullivan Beck, Thomas Sibley, Tobias
Leich, Toby Inkster, Tokuhiro Matsuno, Tom Christiansen, Tom Hukins, Tony Cook, Victor
Efimov, Viktor Turskyi, Vladimir Timofeev, YAMASHINA Hio, Yves Orton, Zefram, Zsban
Ambrus, AEvar Arnfjoer` Bjarmason.

A lista acima está quase certamente incompleta, pois é gerada automaticamente a partir de
histórico de controle de versão. Em particular, não inclui os nomes dos (muito
apreciado) contribuidores que relataram problemas ao bug tracker do Perl.

Muitas das mudanças incluídas nesta versão foram originadas nos módulos CPAN incluídos em
O núcleo do Perl. Somos gratos a toda a comunidade CPAN por ajudar o Perl a florescer.

Para uma lista mais completa de todos os contribuidores históricos do Perl, consulte o AUTORES
arquivo na distribuição de fonte Perl.

Relatórios Erros


Se você encontrar o que acha que é um bug, pode verificar os artigos recentemente postados no
grupo de notícias comp.lang.perl.misc e o banco de dados de bug perl em http://rt.perl.org/perlbug/ .
Também pode haver informações em http://www.perl.org/ , a página inicial do Perl.

Se você acredita que tem um bug não relatado, execute o programa perlbug incluído com
sua liberação. Certifique-se de reduzir seu bug para um caso de teste minúsculo, mas suficiente. Seu bug
relatório, junto com a saída de "perl -V", será enviado para [email protegido] ser
analisado pela equipe de portabilidade Perl.

Se o bug que você está relatando tem implicações de segurança, o que o torna impróprio para
enviar para uma lista de discussão arquivada publicamente, por favor, envie para
[email protegido]. Isso aponta para uma correspondência desarquivada de assinatura fechada
lista, que inclui todos os principais committers, que serão capazes de ajudar a avaliar o impacto
de problemas, descobrir uma solução e ajudar a coordenar o lançamento de patches para
mitigar ou corrigir o problema em todas as plataformas nas quais Perl é suportado. Por favor apenas
use este endereço para questões de segurança no núcleo Perl, não para módulos independentemente
distribuído no CPAN.

Use perl5200delta online usando serviços onworks.net


Servidores e estações de trabalho gratuitos

Baixar aplicativos Windows e Linux

  • 1
    senha de acesso
    senha de acesso
    AuthPass é uma senha de código aberto
    gerente com suporte para o popular e
    comprovado Keepass (kdbx 3.x AND kdbx 4.x ...
    Baixe o passe de autenticação
  • 2
    Zabbix
    Zabbix
    O Zabbix é um software aberto de classe empresarial
    solução de monitoramento distribuído de origem
    projetado para monitorar e rastrear
    desempenho e disponibilidade da rede
    servidores, dispositivos...
    Baixar Zabbix
  • 3
    KDiff3GenericName
    KDiff3GenericName
    Este repositório não é mais mantido
    e é mantido para fins de arquivamento. Ver
    https://invent.kde.org/sdk/kdiff3 for
    o código mais recente e
    https://download.kde.o...
    Baixar o KDiff3
  • 4
    USB Loader GX
    USB Loader GX
    USBLoaderGX é uma GUI para
    Carregador USB de Waninkoko, baseado em
    libwiigui. Permite listar e
    lançar jogos de Wii, jogos de Gamecube e
    homebrew no Wii e WiiU...
    Baixar USBLoaderGX
  • 5
    Firebird
    Firebird
    Firebird RDBMS oferece recursos ANSI SQL
    & roda em Linux, Windows &
    várias plataformas Unix. Características
    excelente simultaneidade e desempenho
    & potência...
    Baixar Firebird
  • 6
    KompoZer
    KompoZer
    KompoZer é um editor HTML wysiwyg usando
    a base de código do Mozilla Composer. Como
    O desenvolvimento do Nvu foi interrompido
    em 2005, KompoZer corrige muitos bugs e
    adiciona um f...
    Baixar KompoZer
  • Mais "

Comandos Linux

Ad