• Publicidad

Perl v5.18 disponible

Novedades y noticias acerca de todo lo relacionado a Perl.

Perl v5.18 disponible

Notapor explorer » 2013-05-19 13:02 @585

Ya está disponible la nueva versión estable de Perl, la v5.18.0.

Perl v5.18.0 representa, aproximadamente, 12 meses de desarrollo desde Perl v5.16.0 y contiene aproximadamente 400 000 líneas de cambios a lo largo de 2100 archivos, por parte de 113 autores.

Las diferencias con la versión anterior son:
  • Nuevo mecanismo para características experimentales.

    Las nuevas características experimentales requerirán este encantamiento:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. no warnings "experimental::feature_name";
    2. use feature "feature_name";  # mostrará un aviso si no se indica la línea ant.
    Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

  • Revisión de los hashes

    Este será el comportamiento más sobresaliente de perl v5.18.0.

    Por defecto, dos variables hash distintas con idénticos pares clave/valor, ofrecerán sus contenidos en orden diferente, cuando antes lo sacaban de forma idéntica.

    La clave para evitar errores en el código actual es aceptar que los hashes son colecciones desordenadas, y actuar de acuerdo a esa idea.
  • Aleatorización de los hashes

    La semilla que se utiliza en la función hash ahora será aleatoria. Esto significa que el orden de los pares clave/valor devuelto por las funciones keys(), values() y each() diferirán en cada ejecución.

    Este cambio se introdujo para hacer a los hashes de Perl más robustos frente a ataques de complejidad algorítmica, y también porque descubrimos que exponía errores dependientes de la ordenación, y les hacía fácil trazarlos.

    A los autores se les anima a no exponer el orden de las claves de los hashes a audiencias inseguras.

    Aún más, cada hash tienee su propio orden de iteración, que debería hacer mucho más difícil determinar cuál es su semilla.
  • Nuevas funciones hash

    Perl v5.18 incluye soporte para múltiples funciones de hash, aunque se recomienda usar la que trae por defecto (SIPHASH), ya que las demás tienen conocidos problemas de seguridad.
  • La variable de entorno PERL_HASH_SEED ahora acepta un valor hexadecimal, y ya no acepta valores enteros decimales
  • Se añade la variable de entorno PERL_PERTURB_KEYS, que permite controlar el nivel de aleatorización aplicada a keys() y funciones afines

    Cuando vale 0, perl no aplicará ninguna aleatorización a las claves. La probabilidad de que las claves cambien de orden debido a una inserción será la misma que en los anteriores perl, que es, básicamente, cuando el tamaño de los cubos de reserva de memoria, cambie.

    Cuando vale 1, perl aleatorizará las claves de una forma no repetible. La probabilidad de que las claves cambien debido a una inserción será muy alta. Este es el modo más seguro, y el valor por defecto.

    Cuando vale 2, perl aleatorizará las claves de una forma repetible. Ejecuciones repetidas del mismo programa deberían producir la misma salida, cada vez.
  • Hash::Util::hash_seed() ahora devuelve una cadena, en lugar de un entero.
  • Se ha cambiado la forma de salida de PERL_HASH_SEED_DEBUG. Ahora hace que perl muestre la función hash con la que perl fue compilado, y la semilla, en hex., para ese proceso en concreto. Ejemplo:
    Código: Seleccionar todo
    $ PERL_HASH_SEED_DEBUG=1 ./perl -e1
    HASH_FUNCTION = MURMUR3 HASH_SEED = 0x1476bb9f

  • Actualización a Unicode 6.2
  • Ahora se incluye a todo el rango de caracteres Unicode la posibilidad de crear alias de sus nombres, y no solo en Inglés
  • La nueva variable ${^LAST_FH} indica el último gestor de archivo que fue leído. Es el gestor de archivo que usa $., tell() y eof() (sin argumentos).
  • Operaciones de conjunto en Expresiones regulares

    Esta es una característica experimental, que permite hacer unión, intersección, etc., de un conjunto de puntos de código, de forma similar a Unicode::Regex::Set. Más información en perlrecharclass.
  • Subrutinas léxicas

    Esta nueva característica sigue siendo experimenta. Para activarla:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. use 5.018;
    2. no warnings "experimental::lexical_subs";
    3. use feature "lexical_subs";
    Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

    Ahora puedes declarar subrutinas con state sub foo, my sub foo y our sub foo.

    state sub crea una subrutina visible dentro del ámbito léxico en que está declarada. La subrutina es compartida entre llamadas a la subrutina externa.

    my sub declara una subrutina léxica que es creada cada vez que se entra en el bloque que la engloba. state sub es ligeramente más rápida que my sub.

    our sub declara un alias léxico a la subrutina del mismo nombre, dentro del package.
  • Etiquetas calculadas

    En los controles de bucles next, last y redo, y en el operador especial dump, se permiten ahora el uso de expresiones de etiquetas calculadas en tiempo de ejecución. Anteriormente, cualquier argumento que no era una constante se trataba como si fuera una cadena de caracteres vacía.
  • Más subrutinas en CORE::

    Más funciones predefinidas se han añadido como subrutinas al espacio de nombres CORE::, sobre todo, aquellos identificadores que pueden ser implementados sin intérpretes personalizado: defined, delete, exists, glob, pos, prototype, scalar, split, study, y undef.
  • kill con nombres de señal, negativos

    kill siempre permitía un número de señal negativo, que mataba al grupo de procesos, en lugar de a un solo proceso. También permitía nombres de señales. Pero no se comportaba de forma consistente con nombres de señal negativos, ya que eran tratados como si fueran 0. Ahora, nombres como -INT se tratan igual a -2
  • Evitar llamar a memset con un valor de contador negativo

    Un código perl pobremente escrito que permita a un atacante especificar un contador al operador perl de repetición de cadenas ('x') puede provocar un agotamiento de memoria, y por lo tanto, un ataque de denegación de servicio.
  • Un nombre de carácter \N{...} desconocido, ahora es un error de sintaxis

    Anteriormente, salía una advertencia, y el carácter era sustituido por el carácter Unicode 'REPLACEMENT CHARACTER'. Unicode recomienda que esta situación sea un error de sintaxis.
  • Los alias de nombres de caracteres \N{} que habían quedado obsoletos, ahora son errores
  • \N{BELL} ahora se refiere a U+1F514 en lugar de a U+0007, que ahora representa a \N{ALERT}
  • Reglas explícitas para los nombres de variables e identificadores

    En perl v5.16 no hay restricción a los nombres de variables de un solo carácter. Esto habría la puerta a varias clases de locura. En v5.18, ahora siguen las reglas de otros identificadores, además de aceptar aquellos caracteres que coincidan con la propiedad \p{POSIX_Punct}.
  • Ahora, los tabuladores verticales se consideran que son espacio en blanco

    Nadie recuerda por qué \s no encontraba \cK, el tabulador vertical. Ahora lo hace. Dada la extrema rareza de este carácter, se esperan pocos estropicios. Dicho esto, esto es lo que significa:

    \s en una exp. reg. coincide ahora con un tab. vertical en todas las ocasiones.

    Los tab. verticales literales en una reg. exp. se ignoran cuando se usa el modificador /x.

    Los tabuladores verticales, solos o mezclados con otro espacio en blanco, son ignorados cuando se interprete una cadena de caracteres como si fuera un número. Por ejemplo:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    $dec = " \cK \t 123";
    $hex = " \cK \t 0xF";

    say 0 + $dec;   # antes era 0, con una advertencia; ahora es 123
    say int $dec;   # antes era 0, ahora 123
    say oct $hex;   # antes era 0, ahora  15
    Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
  • /(?{})/ y /(??{})/ han sido revisados profundamente

    La implementación de esta característica ha sido completamente reescrita. Aunque la intención principal es la de corregir errores, algunos comportamientos, especialmente los relacionados con el ámbito léxico de las variables, se han cambiado.
  • Interpretación más estricta de la parte de reemplazo en una sustitución

    Ya no será posible aprovecharse del intérprete cuando analice s///e, con cosas como esta:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    %_=(_,"Just another ");
    $_="Perl hacker,\n";
    s//_}->{_/e;print
    Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
  • given ahora crea un alias para la $_ global

    En vez de asignar a una $_ léxica de forma implícita, given ahora crea un alias a la $_ global y la usa como su argumento, igual a como lo hace foreach. Sin embargo, sigue usando una $_ léxica si existe una $_ léxica en el ámbito (otra vez, igual a como lo hace foreach)
  • La familia de características de la coincidencia inteligente, ahora son experimentales

    La Coincidencia Inteligente, añadida en v5.10.0, y profundamente revisada en v5.10.1, ha sido un asunto de quejas permanentes. Aunque existen un cierto número de formas de que sea útil, se ha probado que es problemática y confusa, tanto para los usuarios como para los implementadores de Perl. Existen un número de propuestas de cómo dirigir el problema. Está claro que la coincidencia inteligente va a cambiar o a desaparecer en el futuro. No es recomendable confiar en su comportamiento actual.

    Se mostrarán advertencias cuando el intérprete vea ~~, given, o when. Para desactivar estas advertencias, puede añadir esta línea en el ámbito apropiado: no if $] >= 5.018, "experimental::smartmatch";

    Considere, a pesar de todo, el reemplazar estas caracterísiticas, ya que su comportamiento puede cambiar antes de ser considerados estables.
  • $_ léxica ahora es experimental

    Desde su introducción en Perl v5.10, ha causado mucha confusión, sin ninguna solución obvia:
    • Varios módulos (p. e., List::Util) esperan rutinas de retrollamadas para usar la $_ global. use List::Util 'first'; my $_; first { $_ == 1 } @list no funciona como uno podría esperar
    • Una temprana declaración my $_ en el mismo archivo puede provocar advertencia confusas sobre clausuras
    • El carácter de prototipo de subrutina "_" permite a las subrutinas llamadas acceder a su $_ léxico, así que, después de todo, realmente no es una variable privada
    • Sin embargo, subrutinas con un prototipo "(@)" y métodos, no pueden acceder a una $_ léxica de la llamante, a menos que estén escritos en XS
    • Pero incluso rutinas XS no pueden acceder a una $_ declarada como léxica, no en la subrutina que se llama, si no en el ámbito externo, si esa subrutina no menciona $_ o usa ninguno de los operadores que usan como expresión por defecto
    Nuestra esperanza es que la $_ léxica sea rehabilitada, pero esto puede causar cambios en su comportamiento. Por favor, úselo con precaución hasta que sea considerado estable.
  • readline() con $/ = \N ahora lee N caracteres, no N bytes

    Anteriormente, cuando se leía de un flujo de E/S con capas, como las de codificación, la función readline(), también conocida como el operador <>, leería N bytes de la capa más superior.

    Ahora, se leen N caracteres.

    No hay cambios en el comportamiento cuando se lee de flujos sin capas extra, ya que los bytes se traducen exactamente a caracteres.
  • glob sobrecargado ahora solo admite un argumento

    Un glob sobrecargado admitía un segundo argumento mágico, pero indocumentado, que identificaba al llamante. Ningún código en CPAN lo usaba, e iba camino de convertirse en un bug, así que ha sido eliminado. Si necesita, realmente, identificar al llamante, vea Devel::Callsite en CPAN.
  • Interpretación de los documentos incrustados

    El cuerpo de un documento incrustado (here-doc) ahora siempre comienza en la línea a continuación de la marca "<<foo". Anteriormente, estaba documentado que comenzara en la línea siguiente al operador de entrecomillado, pero eso solo sucedía en algunos casos.
  • Los operadores alfanuméricos deben separarse del delimitador de cierre de las expresiones regulares

    Ya no podrá escribir cosas como esta:
    m/a/and 1

    En lugar de eso, debe escribir
    m/a/ and 1

    con espacio en blanco separando el operador del delimitador de cierre de la expresión regular. Sin el espacio en blanco resultaba en una advertencia de obsolescencia desde Perl v5.14.0.
  • qw(...) ya no puede ser utilizado como si fueran paréntesis

    Las listas qw se usaban para engañar al intérprete haciéndolo creer que siempre estaban rodeadas de paréntesis. Esto permitía construcciones sorprendentes como foreach $x qw(a b c) {...}, que realmente debería ser escrito como foreach $x (qw(a b c)) {...}. Esto, en algunas ocasiones, dejaba al motor léxico en un estado erróneo, así que no siempre funcionaba, y la similar foreach qw(a b c) {...} nunco funcionaba.

    Este efecto añadido de qw ha sido completamente abolido. Es obsoleto desde Perl v5.13.11. Ahora es necesario usar paréntesis reales siempre que la gramática los exija.
  • Interacción de advertencias léxicas y las de por defecto

    Al activar las advertencias léxicas, se desactivan las advertencias por defecto, si las advertencias léxicas no estaban ya activadas:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    $*; # aviso de obsolescencia
    use warnings "void";
    $#; # ninguna advertencia; no hay advertencia de obsolescencia
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


    Ahora, las categorías debugging, deprecated, glob, inplace y malloc se dejan activadas cuando se convierten en advertencias léxicas (a menos que hayan sido desactivadas con un no warnings, claro).

    Esto puede provocar advertencias de obsolescencia en código que antes estaba libre de esas advertencias.
  • state sub y our sub

    Debido a un accidente histórico, state sub y our sub eran equivalentes a una simple sub, así que cualquier podía crear una subrutina anónima con our sub { ... }. Ahora esto no se permite hacer si no está activa la característica "lexical_subs". La característica "lexical_subs" tiene ahora nuevos significados descritos en la sección "Subrutinas léxicas" en perlsub.
  • Valores definidos almacenados en el entorno ahora se les fuerza a ser cadenas de bytes

    Un valor almacenado en una variable de entorno siempre había sido convertido en cadena de caracteres. En esta nueva versión, se convierte en una cadena de bytes. Primero, se fuerza a que sea solo una cadena. Lueg, si la cadena está en utf8 y es equivalente al resultado de utf8::downgrade(), se usa ese resultado; de otra forma, se usa utf8::encode(), y se emite una advertencia sobre la existencia de caracteres anchos (ver "Diagnostics").
  • require se muere en archivos que no pueda leer

    Cuando require encuentra un archivo no ilegible, se morirá. Se usa así para ignorar el archivo y continuar buscando en los directorios indicados en @INC.
  • Se interpreta de forma más consistente el primer argumento de split

    Después de algunos cambios en v5.17, el comportamiento de split se ha simplificado: si el argumento PATRÓN se evalúa a una cadena de caracteres que contenga un único espacio en blanco, se trata de la misma manera que si fuera una cadena literal que contenga un espacio.
  • Retiro de módulos

    Los siguientes módulos serán retirados de la distribución principal en una futura versión, y solo podrán ser instalados desde CPAN. Las distribuciones en CPAN que requieran estos módulos deberán listarlos como prerrequisitos.
    • encoding

      El uso de este pragma está fuertemente desaconsejado. Confunde la codificación del código fuente con la codificación de la E/S, reinterpreta las secuencias de escape en el código fuente (algo cuestionable), e introduce el bug UTF-8 en todo el manejo de cadenas de caracteres, en tiempo de ejecución. Está roto desde que se concibió y lejos de ser arreglado.

      Para usar caracteres no-ASCII en el código fuente, por favor refiérase a utf8. Para gestionar datos textuales en E/S, por favor refiérase a Encode y open.
    • Archive::Extract
    • B::Lint
    • B::Lint::Debug
    • CPANPLUS y todos los módulos CPANPLUS::*
    • Devel::InnerPackage
    • Log::Message
    • Log::Message::Config
    • Log::Message::Handlers
    • Log::Message::Item
    • Log::Message::Simple
    • Module::Pluggable
    • Module::Pluggable::Object
    • Object::Accessor
    • Pod::LaTeX
    • Term::UI
    • Term::UI::History
  • Herramientas obsoletas

    Las siguientes utilidades serán retiradas de la distribución principal en una futura versión, así como sus módulos sean marcados como obsoletos. Seguirán estando disponibles en CPAN.
    • cpanp
    • cpanp-run-perl
    • cpan2dist
      Estos ítemes son parte de la distribución de CPANPLUS
    • pod2latex
      Este ítem es parte de la distribución de Pod::LaTeX
  • PL_sv_objcount

    Esta variable global del intérprete utilizada para seguir el número total de objetos Perl ya no será mantenida y será eliminada en Perl v5.20.
  • Cinco caracteres adicionales deben ser escapados en patrones con /x

    Cuando un patrón de expresiones regulares se compila con /x, Perl trata 6 caracteres como espacio en blanco que debe ignorar, como ESPACIO y TABULADOR. Sin embargo, Unicode recomienda que sean 11. Seguiremos esta recomendación en una futura versión de Perl. Mientras tanto, el uso de cualquiera de estos caracteres levantará una advertencia de obsolescencia, a menos que se desactiven las advertencias. Los cinco caracteres son:
    Código: Seleccionar todo
    U+0085 NEXT LINE
    U+200E LEFT-TO-RIGHT MARK
    U+200F RIGHT-TO-LEFT MARK
    U+2028 LINE SEPARATOR
    U+2029 PARAGRAPH SEPARATOR

  • Nombres de caracteres definidos por el usuario con espacio en blanco inesperado

    Un nombre de carácter definido por el usuario con uno o más caracteres espacio al final, muy posiblemente sea debido a un error tipográfico. Ahora esto genera una advertencia en el momento de la definición, y la asunción de que su uso implicará no tener en cuenta ese espacio en blanco excedente.
  • Varias funciones XS ahora son obsoletas

    Todas las funciones utilizadas para clasificar caracteres serán eliminadas en una futura versión de Perl, y no deben ser usadas. Cuando participen compiladores de C (p. e., gcc), compilar cualquier archivo que use cualquiera de ellas generará una advertencia. No existía la intención de que fueran de uso público; existen macros equivalentes y más rápidas, para la mayoría de ellas.

    Vea "Clases de caracteres" en perlapi. La lista completa es:

    is_uni_alnum, is_uni_alnumc, is_uni_alnumc_lc, is_uni_alnum_lc, is_uni_alpha, is_uni_alpha_lc, is_uni_ascii, is_uni_ascii_lc, is_uni_blank, is_uni_blank_lc, is_uni_cntrl, is_uni_cntrl_lc, is_uni_digit, is_uni_digit_lc, is_uni_graph, is_uni_graph_lc, is_uni_idfirst, is_uni_idfirst_lc, is_uni_lower, is_uni_lower_lc, is_uni_print, is_uni_print_lc, is_uni_punct, is_uni_punct_lc, is_uni_space, is_uni_space_lc, is_uni_upper, is_uni_upper_lc, is_uni_xdigit, is_uni_xdigit_lc, is_utf8_alnum, is_utf8_alnumc, is_utf8_alpha, is_utf8_ascii, is_utf8_blank, is_utf8_char, is_utf8_cntrl, is_utf8_digit, is_utf8_graph, is_utf8_idcont, is_utf8_idfirst, is_utf8_lower, is_utf8_mark, is_utf8_perl_space, is_utf8_perl_word, is_utf8_posix_digit, is_utf8_print, is_utf8_punct, is_utf8_space, is_utf8_upper, is_utf8_xdigit, is_utf8_xidcont, is_utf8_xidfirst.

    Además, tres funciones que nunca han funcionado apropiadamente han quedado obsoletas: to_uni_lower_lc, to_uni_title_lc, y to_uni_upper_lc.
  • Ciertos raros usos de barras diagonales inversas dentro de las exp. reg. son ahora obsoletos

    Existen tres pares de caracteres que Perl reconoce como metacaracteres en patrones de expresiones regulares: {}, [], y (). Se pueden usar también como delimitadores de patrones, como en:
    m{foo}
    s(foo)(bar)


    Ya que son metacaracteres, tienen un significado especial para los patrones de expresiones regulares, y resulta que no podemos desactivar ese significado especial por el medio normal de precederlo con una barra diagonal inversa, si además están siendo usados, por parejas, en un patrón que está delimitado por ellos. Por ejemplo, en
    m{foo\{1,3\}}

    las barras diagonales inversas no cambian el comportamiento, y esa línea busca una "f" seguida de una a tres ocurrencias de "o".

    Usos como este, donde son interpretados como metacaracteres, son extremadamente raros; nosotros creemos que no hay ninguno, por ejemplo, en todo CPAN. Así que, esta obsolescencia deberia afectar a muy poco código. of CPAN. Este cambio nos obligará a cambiar cualquier código escrito así, pero nos ayudará en futuras versiones de Perl a que las barras diagonales inversas sigan teniendo su efecto correcto, sin temos que se rompa código existente.
  • Separar los token (? y (* en expresiones regulares

    Una advertencia de obsolescencia se levanta si el ( y el ? se separan con espacio en blanco o comentarios, en construcciones de expresiones regulares (?...). De forma similar, si el ( y el * se separan en construcciones (*VERB...).
  • Próximas obsolescencias
    • Plataformas sin soporte
      • Windows CE
      • z/OS
      • DG/UX
      • NeXT
      Creemos que las actuales versiones de Perl ya no se compilan en AmigaOS, DJGPP, NetWare (nativamente), OS/2 y Plan 9. Si estás usando Perl en alguna de estas plataformas y tienes interés en que siga así, por favor, ponte en contacto con nosotros.

      Creemos que Perl ya no es capaz de compilarse en arquitecturas con órdenes de bits mezclados (como los de la PDP-11), y la intención es retirarles código de soporte. De forma similar, código que soportaba al largamente y no mantenido GNU dld será retirado pronto, si no da a conocer ningún usuario activo de esta plataforma.
    • Intercambio de $< y $>

      Perl soportaba el modismo de intercambiar $< y $> (así como $( y $)) para disminuir permisos de forma temporal, desde v5.0, como aquí:
      ($<, $>) = ($>, $<);

      Sin embargo, este modismo modifica el id real de usuario/grupo, que puede tener efectos colaterales indeseables, así que ya no es útil en ninguna plataforma que Perl soporte, y complica la implementación de estas variables y asignación de listas, en general.

      Como alternativa, se recomienda solo asignar a $>:
      local $> = $<;

      Vea también: Setuid desmitificado.
    • microperl, largo tiempo roto, y sin un propósito claro, será retirado
    • Rehacer la semántica "\Q" en cadenas de caracteres doblemente entrecomilladas cuando se combina con otras secuencias de escapado

      Existen bastantes errores e inconsistencias alrededor de combinaciones de \Q y secuencias de escapado, como \x, \L, etc., dentro de una pareja \Q...\E. Necesitan ser arreglados, y esto hará que su comportamiento cambie. Los cambios no han sido establecidos, todavía.
    • Uso de $x, donde 'x' representa cualquier carácter de control C0 (no imprimible) será prohibido en una futura versión de Perl. Use en su lugar ${x} (donde, de nuevo, 'x' representa un carácter de control) o, mejor aún, $^A, donde '^' es un circunflejo (CIRCUMFLEX ACCENT), y 'A' representa cualquiera de los caracteres listados al final de "OPERATOR DIFFERENCES" en perlebcdic.
  • Mejoras en las prestaciones
    • Listas de declaraciones de variables léxicas (my($x, $y)) son ahora optimizadas a una sola operación, por lo que son más rápidas que antes.
    • Se añadió un nuevo define de preprocesador C, NO_TAINT_SUPPORT, que, si está puesto, desactiva el soporte para el modo entintado de Perl. El uso de las banderas -T o -t en la línea de comandos provocará un error fatal. Cuidado que tanto comprobaciones del núcleo como de muchas distribuciones de CPAN fallarán con este cambio. En la parte positiva, ofrece una pequeña mejora en las prestaciones debido a la reducción de saltos.

      No lo active a menos que sepa exactamente qué es lo que obtiene.
    • pack con argumentos constantes es plegado a una constante, en la mayor parte de los casos.
    • Aumento de velocidad en la búsqueda con expresiones regulares con propiedades Unicode. La mayor ganancia es con \X, el "agregador de grafemas extendido". La ganancia es del 35 % al 40 %. Clases carácter entre corchetes, p., e., [0-9\x{100}] conteniendo puntos de código por encima del 255, son también más rápidos.
    • En plataformas que lo soporten, muchas macros anteriores se implementan ahora como funciones inline estáticas. Esto debería aumentar la velocidad ligeramente en plataformas no-GCC.
    • La optimización de hashes en contexto booleano se ha extendido para afectar a scalar(%hash), %hash ? ... : ..., y sub { %hash || ... }.
    • Los operadores de test de archivos gestionan la pila de una forma más eficiente.
    • Las expansiones usadas en contexto numérico ahora son convertidas a números directamente, en la mayor parte de los casos, en lugar de ser convertidos a números tras una conversión a cadena de caracteres.
    • El operador de repetición 'x' ahora es plegado a una sola constante en tiempo de compilación si es llamado en contexto escalar con operandos constantes y sin paréntesis alrededor del operando izquierdo.
  • Módulos y pragmas
    • Nuevos módulos y pragmas

      Config::Perl::V versión 0.16 se ha añadido como un módulo con doble vida. Ofrece una estructurada recuperación de la salida de perl -V incluyendo solo la información que el binario perl conoce, y no la que está disponible vía Config.
    • Módulos y pragmas actualizados

      Para una lista completa de actualizaciones, ejecute:
      $ corelist --diff 5.16.0 5.18.0
    • Módulos y pragmas retirados

      Version::Requirements ha sido retirado de la distribución principal. Está disponible con un nombre diferente: CPAN::Meta::Requirements.
  • Documentación. Cambios en la documentación actual
    • perlcheat
      perlcheat se ha reorganizado, y se han añadido nuevas secciones.
    • perldata
      Ahora documenta explícitamente el comportamiento de los inicializadores de listas que contengan claves duplicadas.
    • perldiag
      En la explicación de sobre la prohibición de uso de las referencias simbólicas por medio de "strict refs", ahora no se asume que el lector sepa qué es una referencia simbólica.
    • perlfaq
      perlfaq se ha sincronizado con la versión 5.0150040 de CPAN.
    • perlfunc
      Se ha documentado el valor de retorno de pipe.
      Documentación más clara para our.
    • perlop
      Los verbos de control de bucle (dump, goto, next, last y redo) siempre han tenido la misma precedencia que los operadores de asignación, pero no habían sido documentado hasta ahora.
  • Soporte para plataformas. Plataformas descontinuadas
    • BeOS

      BeOS fue un sistema operativo para ordenadores personales desarrollado por Be Inc, inicialmente para el hardware BeBox. El sistema operativo Haiku fue escrito como un reemplazo, en forma de código fuente abierto, como continuación/para BeOS, y su soporte Perl se sigue manteniendo con fuerza.
    • UTS Global

      El código para el soporte de UTS Global ha sido retirado. UTS fue una versión mainframe de System V, creado por Amdahl, y luego vendido a UTS Global. La versión de Perl no se ha tocado desde la versión v5.8.0, y UTS Global está muerto.
    • VM/ESA

      Soporte para VM/ESA ha sido retirado. Perl ha sido probado en 2.3.0, que IBM terminó de dar servicio en marzo de 2002. 2.4.0 terminó su servicio en junio de 2003, y fue reemplazado por Z/VM. La versión actual de Z/VM es la v6.2.0, y está planeado su fin de servicio el 30 de abril del 2015.
    • MPE/IX

      El soporte para MPE/IX ha sido retirado.
    • EPOC

      Soporte en código para EPOC ha sido retirado. EPOC fue una familia de sistemas operativos desarrollado por Psion para dispositivos móviles. Fue el predecesor de Symbian. La última versión de Perl fue actualizada en abril de 2002.
    • Rhapsody

      Soporte para Rhapsody ha sido retirado.

  • Problemas conocidos

    Cadenas marcadas como UTF8 en %ENV en HP-UX 11.00 son propensas a tener errores.
  • Obituario

    Hojung Yoon (AMORETTE), 24, de Seul, Corea del Sur, murió el 8 de mayo de 2013, junto con su tarjeta autografiada de TIMTOADY. Fue un brillante y joven hacker en Perl 5 y 6, y un miembro devoto de Seoul.pm. Programó Perl, habló Perl, comió Perl y amó Perl. Creemos que sigue programando en Perl con su portátil IBM roto, en algún lugar. Se le echará de menos.
  • Reconocimientos

    Perl continúa floreciendo en su tercera década gracias a una vibrante comunidad de usuarios y desarrolladores. Las siguientes personas han contribuido a la aparición de Perl v5.18.0:

    Aaron Crane, Aaron Trevena, Abhijit Menon-Sen, Adrian M. Enache, Alan Haggai Alavi, Alexandr Ciornii, Andrew Tam, Andy Dougherty, Anton Nikishaev, Aristotle Pagaltzis, Augustina Blair, Bob Ernst, Brad Gilbert, Breno G. de Oliveira, Brian Carlson, Brian Fraser, Charlie Gonzalez, Chip Salzenberg, Chris 'BinGOs' Williams, Christian Hansen, Colin Kuskie, Craig A. Berry, Dagfinn Ilmari Mannsåker, Daniel Dragan, Daniel Perrett, Darin McBride, Dave Rolsky, David Golden, David Leadbeater, David Mitchell, David Nicol, Dominic Hargreaves, E. Choroba, Eric Brine, Evan Miller, Father Chrysostomos, Florian Ragwitz, François Perrad, George Greer, Goro Fuji, H.Merijn Brand, Herbert Breunung, Hugo van der Sanden, Igor Zaytsev, James E Keenan, Jan Dubois, Jasmine Ahuja, Jerry D. Hedden, Jess Robinson, Jesse Luehrs, Joaquin Ferrero, Joel Berger, John Goodyear, John Peacock, Karen Etheridge, Karl Williamson, Karthik Rajagopalan, Kent Fredric, Leon Timmermans, Lucas Holt, Lukas Mai, Marcus Holland-Moritz, Markus Jansen, Martin Hasch, Matthew Horsfall, Max Maischein, Michael G Schwern, Michael Schroeder, Moritz Lenz, Nicholas Clark, Niko Tyni, Oleg Nesterov, Patrik Hägglund, Paul Green, Paul Johnson, Paul Marquess, Peter Martini, Rafael Garcia-Suarez, Reini Urban, Renee Baecker, Rhesa Rozendaal, Ricardo Signes, Robin Barker, Ronald J. Kimball, Ruslan Zakirov, Salvador Fandiño, Sawyer X, Scott Lanning, Sergey Alekseev, Shawn M Moore, Shirakata Kentaro, Shlomi Fish, Sisyphus, Smylers, Steffen Müller, Steve Hay, Steve Peters, Steven Schubiger, Sullivan Beck, Sven Strickroth, Sébastien Aperghis-Tramoni, Thomas Sibley, Tobias Leich, Tom Wyant, Tony Cook, Vadim Konovalov, Vincent Pit, Volker Schatz, Walt Mankowski, Yves Orton, Zefram.

    La lista anterior es claramente incompleta, ya que se genera automáticamente desde el histórico de control de versiones. En particular, no incluye los nombres de los (muy apreciados) contribuyentes que han informado de problemas al Perl bug tracker.

    Muchos de los cambios incluidos en esta versión se originaron en los módulos CPAN incluidos en el núcleo principal de Perl. Estamos agradecidos a toda la comunidad CPAN para ayudar a Perl.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Perl v5.18.0 disponible

Notapor explorer » 2013-05-22 13:52 @619

Se urge a los autores de módulos en CPAN, que los prueben con Perl v5.18, sobre todo para saber si son compatibles con la nueva característica de aleatorización de los hashes.

Artículo (en inglés)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl v5.18.1 disponible

Notapor explorer » 2013-08-12 17:29 @770

Acaba de salir la versión 5.18.1, con un montón de errores arreglados.

  • A partir de v5.18.0, una construcción como /[#](?{})/x podría interpretar incorrectamente # como un comentario. El bloque de código será ignorado, no interpretado. Esto ha sido corregido
  • Un número de fallos de agotamiento de memoria relacionados con una nueva y experimental característica de clase de caracteres en exp. reg., han sido corregidos
  • El código de reserva de OP ahora devuelve memoria alineada de forma correcta en todos los casos, para la struct pmop. Anteriormente, podría devolver memoria alienada solamente en múltiplos de 4 bytes, que no es correcto para una compilación ithreads con IV de 64 bit, en algunas plataformas de 32 bit. A destacar, esto provocaba el fallo completo de la compilación en sparc GNU/Linux. [RT #118055]
  • El comando man del depurador se ha corregido. Estaba mal desde v5.18.0. Ahora el comando man es ahora un alias de doc y perldoc. Todo vuelve a funcionar
  • @_ se muestra, ahora, correctamente, en el depurador, arreglando una regresión introducida en el depurador del v5.18.0. [RT #118169]
  • Arregladas un pequeño número de construcciones de exp. reg. que podrían, tanto hacer fallar una concordancia o colgar a perl, cuando la cadena a ser examinada era alojada más allá del límite de los 2 GB en sistemas de 32 bit. [RT #118175]
  • Perl v5.16 introducía inadvertidamente un error cuando llamaba a XSUB que no eran visibles en tiempo de compilación, donde eran tratados como valores-izquierda, y podrían recibir una asignación, incluso cuando la subrutina no fuera un subrutina de valor-izquierda. Se ha corregido. [perl #117947]
  • Perl v5.18 introducía inadvertidamente un error en las variables duales (es decir, variables con valores tanto numéricas como de cadena, como el caso de $!), donde la condición de verdad de la variable se determinaba por el valor numérico en lugar de por el valor de la cadena de caracteres. [RT #118159]
  • Perl v5.18 introducía inadvertidamente un error cuando en la interpolación se mezclaban cadenas de caracteres con codificación UTF-8 o otras que no, en exp. reg., que podría resultar en un patrón UTF-8 mal formado: específicamente, si un carácter no codificado, en el rango \x80..\xff, seguid de otro codificado en UTF-8, así:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
        utf8::upgrade(  my $u = "\x{e5}");
        utf8::downgrade(my $d = "\x{e5}");
        /$u$d/
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

    [perl #118297]
  • Constantes léxicas (my sub a() { 42 }) ya no cuelgan cuando se insertan en el código (inlined)
  • Parámetros de prototipos unidos a subrutinas léxicas ahora son respetados cuando se compilan llamadas a subrutinas sin paréntesis. Anteriormente, los prototipos eran verificados solo para las llamadas con paréntesis. [RT #116735]
  • Errores de sintaxis en subrutinas léxicas en combinación con llamadas a las mismas subrutinas, ya no provocan un cuelgue en tiempo de compilación
  • La sonda de subrutinas dtrace ahora funciona con subrutinas léxicas, en lugar de colgar. [perl #118305].
  • Indefinir una subrutina léxica no insertable (my sub foo() { 42 } undef &foo) podría causar un cuelgue si estaban activadas las advertencias
  • Advertencias sobre recursión demasiado profunda ya no cuelga subrutinas léxicas. [RT #118521]
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl v5.18.2 disponible

Notapor explorer » 2014-01-07 16:51 @743

Acaba de salir la v5.18.2, con los siguientes cambios:

Módulos
Se han actualizado los siguientes módulos:
  • B
  • B::Concise
  • English
  • File::Glob
Documentación
  • perlrepository
  • perlhack
Errores corregidos
  • Perl 5.18.1 incorporó una regresión en el arreglo de un error en las subrutinas léxicas. Algunos resultados de B::SPECIAL desde B::CV::GV se convierten en indefinidos. Esto rompe Devel::Cover y otras bibliotecas. Esto ha sido arreglado. [perl #119351]
  • Perl 5.18.0 incorporó una regresión en [:^ascii:], si es usada la misma clase de caracteres con otros cualificadores, podría hacer fallar la coincidencia de caracteres en el bloque del Latin-1. Esto ha sido arreglado. [perl #120799]
  • Perl 5.18.0 incorporó una regresión al usar el método ->SUPER::método con AUTOLOAD activando AUTOLOAD del paquete actual, en lugar de la superclase del paquete. Esto ha sido arreglado. [perl #120694]
  • Perl 5.18.0 incorporó una regresión por la cual -bareword ya no se permitía bajo los pragmas strict e integer cuando se usan juntos. Esto ha sido arreglado. [perl #120288]
  • Anteriormente, PerlIOBase_dup no comprobaba si se introducía de forma existosa una nueva capa antes (opcionalmente) de activar la bandera utf8. Esto podría causar fallos de segmentación por puntero nulo. Esto ha sido arreglado.
  • Se ha corregido un desbordamiento de búfer con identificadores muy largos.
  • La construcción $r = qr/.../; /$r/p ahora es gestionada de forma correcta. [perl #118213]

Perl v5.18.2 representa aproximadamente 3 meses de desarrollo desde Perl v5.18.1 y contiene aproximadamente 980 líneas de cambios a lo largo de 39 archivos, por parte de 4 autores.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Noticias de Perl

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron