2011-06-20 14 views
22

¿Qué es exactamente lo que 'usa 5.014'?Perl: ¿Qué características exactas admite 'usar 5.014'?

Por favor, alguien copie & pegue aquí, porque no pude encontrarlo en ningún perldoc. (tal vez estoy ciego). En la 'característica de perldoc' son solo algunas cosas para el 5.10. O dirígeme a alguna URL.

thanx.

EDIT:

Por favor, compruebe primero, ¿qué respuesta. Por ejemplo: intente lo siguiente:

use 5.008; 
$s=1; 
say "hello"; 

obtendrá mensaje de error sobre el "decir", porque Perl 5.8 no sabe "decir"

después, intente esto:

use 5.014; 
$s=1; 
say "hello"; 

obtendrá el error

Global symbol "$s" requires explicit package name 

así, el "uso 5.014" permitiendouse strict, y use feature 'say'; - de forma predeterminada.

Respuesta

27

Además de what raj correctly said acerca de los mensajes de error que recibiría si usa use 5.014 con una versión anterior de Perl, puede encontrar una lista de características habilitadas para leer el source code of feature. La parte pertinente se encuentra cerca de la parte superior:

my %feature_bundle = (
    "5.10" => [qw(switch say state)], 
    "5.11" => [qw(switch say state unicode_strings)], 
    "5.12" => [qw(switch say state unicode_strings)], 
    "5.13" => [qw(switch say state unicode_strings)], 
    "5.14" => [qw(switch say state unicode_strings)], 
); 

la parte estricta bits está enterrado algo más profundo en el código para el propio intérprete. Si nos fijamos en pp_ctl.c for tag v5.11.0:

/* If a version >= 5.11.0 is requested, strictures are on by default! */ 

if (PL_compcv && vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) { 
    PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS); 
} 
+0

Gracias por el puntero. Solo que no se ve en la fuente el "uso estricto". – jm666

+0

Excelente respuesta: gracias por encontrar la fuente que ayuda a especificar qué trae cada paquete. Una pregunta: 'strict' también se habilita automáticamente (a partir del 5.12, como recuerdo). ¿Sabes dónde/cuándo se hace eso?(No figura en el código fuente de 'feature', por lo que puedo decir. – Telemachus

+0

Terrific - gracias. (La tuya realmente debería ser la respuesta aceptada.) – Telemachus

4

El use x.x.x pragma hace su vez en algunas características, y es bastante fácil de probar esto:

#!/usr/bin/env perl 
use warnings; 
use 5.14.0; 

say "hello world!" 

se ejecuta muy bien; salidas "hello world!".

#!/usr/bin/env perl 
use warnings; 
# use 5.14.0; 

say "hello world!" 

Flaming death; salidas de este mensaje de error:

Unquoted string "say" may clash with future reserved word at foo line 5. 
String found where operator expected at foo line 5, near "say "hello world!"" 
    (Do you need to predeclare say?) 
syntax error at foo line 5, near "say "hello world!"" 
Execution of foo aborted due to compilation errors. 

No soy, sin embargo, 100% seguro de qué funciones se activan a partir de 5.14.0. Creo que obtienes say, state, switch, unicode_strings y strict.

4

En nuevos Perls (a partir de 5,10 creo) use 5.x hace una implícita use feature ':5.x' Lectura a través de los perldeltas para 5.12 & 5.14, veo una característica relacionada con Unicode agregado en 5.12, pero aparece que no se agregó nada nuevo en 5.14.

+0

THANX por señalarme el" deltas ", donde: Usando el uso de la sintaxis de VERSIÓN con un número de versión mayor o igual a 5.11.0 se habilitarán léxicamente estenosis al igual que el uso estricto haría (además de habilitar las características). ¡GRACIAS! – jm666

+0

también vea esta respuesta: http://stackoverflow.com/questions/6050031/why-are-use-warnings-use-strict-not-default-in-perl/6050340#6050340 –

Cuestiones relacionadas