No puedo evaluar el código 'moderno perl' dentro del depurador Perl. Funciona bien al depurar el código en un archivo, pero no desde el prompt.¿Cómo usar las características de Perl 5.10 dentro del depurador?
ejemplo mínimo:
# activating 5-10 features with -E (it works)
$ perl -E 'say "x"'
x
# calling the debugger with -E # it works for infile code but for prompt line code... $ perl -dEbug Loading DB routines from perl5db.pl version 1.33 DB say "x" String found where operator expected at (eval 16)[/local-perl/lib/5.12.1/perl5db.pl:638] line 2, near "say "x"" at (eval 16)[/local-perl/lib/5.12.1/perl5db.pl:638] line 2 eval '([email protected], $!, $^E, $,, $/, $\\, $^W) = @saved;package main; $^D = $^D | $DB::db_stop;say "x";
[Nota: lo mismo sucede con el "uso de las funciones ': 5.10'"]
Me estoy perdiendo algo?
Hummm, gracias por su respuesta, explica por qué sucede. Pero ahora estoy más perplejo: lo intenté antes de cargar estas funciones en el depurador con 'use feature' say '' y esto no funcionó. Ahora vi el truco: debería estar en la misma línea. ¿¿¿Por qué??? ¿Por qué el módulo 'feature' exporta las funciones localizadas al alcance actual (la línea DB)? ¿Cómo 'usar' puede hacer eso? Pensé que siempre era global. Si querías algo localizado, usa 'requiere' ¿no es así ?. Agradecería cualquier aclaración sobre este tema. –
Pensé que era inusual, también. Para ser sincero, no estoy muy seguro de la parte de "por qué", pero parece que estás absolutamente en lo cierto: las sentencias 'use feature x' actúan como si estuvieran en el alcance de la línea DB. Supongo que cada línea se ejecuta como un bloque/alcance diferente, porque declarar una variable como 'my $ x = 1' también hará que' $ x' no esté disponible en las líneas siguientes (ya que no está en el alcance de la siguiente línea, solo la línea actual). Esto sería coherente, ya que los pragmas (como 'feature') tienen un alcance léxico al final del bloque en el que los usa. – eldarerathis
gracias, me perdí el alcance léxico 'característica'. Esto explica la 'acción solo en la línea'. ¿Pero sabes por qué si mi módulo o script comienza con la función 'use' tampoco funciona?¿Significa que sucedería con todas las 'características de uso ...' ?. Y finalmente, si está utilizando las características perl> 5.10, en su secuencia de comandos, ¿cómo las depura cuando la línea tiene un error y desea jugar con ella en el depurador? ¿Usarías Devel :: REPL para jugar con él? –