Using bash Syntax Highlighting
- perl -MO=Deparse, -p -e '$a + $b * $c / $d % $e'
- -e syntax OK
- ($a + ((($b * $c) / $d) % $e));
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
La documentación http://perldoc.perl.org/B/Deparse.html afirma, en efecto que:
When you use the -p option, the output also includes parentheses even when they are not required by precedence, which can make it easy to see if perl is parsing your expressions the way you intended.
Sin embargo, con mi Perl...
This is perl 5, version 14, subversion 2 (v5.14.2) built for i486-linux-gnu-thread-multi-64int (with 80 registered patches, see perl -V for more detail)
Obtengo el siguiente resultado:
Using bash Syntax Highlighting
- xxxx@xxxxx:~$ perl -MO=Deparse, -p -e '$a + $b * $c /$d % $e'
- LINE: while (defined($_ = <ARGV>)) {
- $a + $b * $c / $d % $e;
- }
- continue {
- die "-p destination: $!\n" unless print $_;
- }
- -e syntax OK
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
que no tiene nada que ver con lo que pretendo obtener.
Tengo además otra duda acerca de la forma de invocar a Deparse, pues la documentación sobre los switches del intérprete de Perl no indican nada sobre un parámetro 'O', mientras que invocamos a Deparse mediante -MO=Deparse en vez de -MB::Deparse como cabría esperar, si no me equivoco.
Los switches que tengo disponibles según 'perl -h' son:
Usage: perl [switches] [--] [programfile] [arguments]
-0[octal] specify record separator (\0, if no argument)
-a autosplit mode with -n or -p (splits $_ into @F)
-C[number/list] enables the listed Unicode features
-c check syntax only (runs BEGIN and CHECK blocks)
-d[:debugger] run program under debugger
-D[number/list] set debugging flags (argument is a bit mask or alphabets)
-e program one line of program (several -e's allowed, omit programfile)
-E program like -e, but enables all optional features
-f don't do $sitelib/sitecustomize.pl at startup
-F/pattern/ split() pattern for -a switch (//'s are optional)
-i[extension] edit <> files in place (makes backup if extension supplied)
-Idirectory specify @INC/#include directory (several -I's allowed)
-l[octal] enable line ending processing, specifies line terminator
-[mM][-]module execute "use/no module..." before executing program
-n assume "while (<>) { ... }" loop around program
-p assume loop like -n but print line also, like sed
-s enable rudimentary parsing for switches after programfile
-S look for programfile using PATH environment variable
-t enable tainting warnings
-T enable tainting checks
-u dump core after parsing program
-U allow unsafe operations
-v print version, patchlevel and license
-V[:variable] print configuration summary (or a single Config.pm variable)
-w enable many useful warnings
-W enable all warnings
-x[directory] ignore text before #!perl line (optionally cd to directory)
-X disable all warnings
Un saludo