• Publicidad

Texto condicional dentro de bloques

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Texto condicional dentro de bloques

Notapor pablgonz » 2017-02-03 10:56 @497

Hola a todos en el foro.

Estoy escribiendo un script y me asaltaron un par de dudas con algunas líneas que deseo se modifiquen si están dentro de un if(){...} (esa es mi duda principal) y respecto de cómo hacer un par de cosas.

Me explico. El esqueleto del script que poseo es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.24;
  3. use Getopt::Long qw(:config bundling_values require_order no_ignore_case);
  4.  
  5. ### Variables
  6. my $DPI       = "150";
  7. my $arara     = 0;
  8. my $latex     = 0;
  9. my $dvips     = 0;
  10. my $dvipdf    = 0;
  11. my $xetex     = 0;
  12. my $luatex    = 0;
  13. my $pdf       = 1;
  14. my $bmp       = 0;
  15. my $tif       = 0;
  16. my $png       = 0;
  17. my $jpg       = 0;
  18. my $gray      = 0;
  19. my $verbose   = 0;
  20. my $help      = 0;
  21. my @clean     = 'doc';
  22.  
  23. ### Uso
  24. my $usage = <<'USAGE';
  25. Uso:    myscript [options] <file>.<ext>
  26.         myscript --latex   <file>.<ext>
  27.  
  28. USAGE
  29.  
  30. ### Error
  31. sub errorUsage { die "@_ (Use  --help para vel las opciones)\n"; }
  32.  
  33. ### Getopt::Long configuration
  34. my $result=GetOptions (
  35. # formatos imagen
  36.     'd|dpi=i'           => \$DPI,    # entero
  37.     'b|bmp'             => \$bmp,    # gs
  38.     't|tif'             => \$tif,    # gs
  39.     'j|jpg'             => \$jpg,    # gs
  40.     'p|png'             => \$png,    # gs
  41.     'g|gray'            => \$gray,   # gray
  42. # compiladores
  43.     'arara'             => \$arara,  # arara compiler
  44.     'xetex'             => \$xetex,  # xelatex compiler
  45.     'latex'             => \$latex,  # latex compiler
  46.     'luatex'            => \$luatex, # lualatex compiler
  47.     'dvips'             => \$dvips,  # dvips compiler
  48.     'dvipdf'            => \$dvipdf, # dvipdfmx compiler
  49. # clean
  50.     'clean=s{1}'        => \@clean,  # pst doc tikz off all
  51. # default
  52.     'help'              => \$help,    # help
  53.     'pdf!'              => \$pdf,     # pdf
  54.     'verbose'           => \$verbose, # verbose
  55.     ) or die $usage;
  56.  
  57. ### Help
  58. if ($help) {
  59.     print $usage;
  60.     exit(0);
  61. }
  62.  
  63. ### Validar clean
  64. my %clean =  map { $_ => 1 } @clean;
  65.  
  66. ### Veamos clean
  67. if(exists($clean{off})){
  68. say "$clean{off}";
  69. }
  70. if(exists($clean{pst})){
  71. say "$clean{pst}";
  72. }
  73.  
  74. ### --shell-escape
  75. my $write18 = '-shell-escape';
  76. $write18 = '-enable-write18' if defined($ENV{"TEXSYSTEM"}) and
  77.                           $ENV{"TEXSYSTEM"} =~ /miktex/i;
  78.  
  79. ### Opciones del compilador
  80. my $opt_compiler = $verbose ? "$write18 -interaction=nonstopmode -recorder"
  81.                  :            "$write18 -interaction=batchmode -recorder"
  82.                  ;
  83.  
  84. ### Compiladores
  85. my $compiler = $xetex ?  "xelatex $opt_compiler"
  86.              : $luatex ? "lualatex $opt_compiler"
  87.              : $latex ?  "latex $opt_compiler"
  88.              : $dvips ?  "latex $opt_compiler"
  89.              : $dvipdf ? "latex $opt_compiler"
  90.              : $arara ?  'arara'
  91.              :           "pdflatex $opt_compiler"
  92.              ;
  93.  
  94. ### Probamos por defecto
  95. say "$compiler archivo.tex";
  96.  
  97. ### Ahora si se usa $latex cambiamos
  98. $compiler = "pdflatex $opt_compiler" if $latex;
  99. say "$compiler archivo.tex";
  100.  
  101. #### DEVICE usados por GS
  102. my $opt_gs_dev =   $pdf  ? '-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress'
  103.                :   $gray ? '-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray'
  104.                :   $png  ? "-sDEVICE=pngalpha -r$DPI"
  105.                :   $bmp  ? "-sDEVICE=bmp32b -r$DPI"
  106.                :   $jpg  ? "-sDEVICE=jpeg -r$DPI -dJPEGQ=100 -dGraphicsAlphaBits=4 -dTextAlphaBits=4"
  107.                :   $tif  ? "-sDEVICE=tiff32nc -r$DPI"
  108.                :           ''
  109.                ;
  110.                
  111. my $ghostcmd = "gs -q -dNOSAFER $opt_gs_dev";
  112.  
  113. if($pdf){
  114. say "$ghostcmd -o salida entrada";
  115. }
  116.  
  117. if($gray){
  118. say "$ghostcmd -o salida entrada";
  119. }
  120.  
  121. if($png){
  122. say "$ghostcmd -o salida entrada";
  123. }
  124.  
  125. if($bmp){
  126. say "$ghostcmd -o salida entrada";
  127. }
  128.  
  129. if($tif){
  130. say "$ghostcmd -o salida entrada";
  131. }
  132.  
  133. __END__
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Cuando defino $compiler se comporta como lo deseo, es decir, si paso alguna opción este va cambiando su valor acorde a la opción, claro. En este caso las opciones son mutuamente exclusivas y en algún punto del script deseo modificar un solo valor (línea 98)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $compiler = "pdflatex $opt_compiler" if $latex;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
¿Es ésta la forma correcta de hacerlo?

En las líneas 101 a la 111 donde defino $opt_gs_dev y $ghostcmd es donde está mi gran consulta. Las opciones (eps, pdf, png, tif, bmp) no son mutuamente exclusivas y se pueden pasar más de una a la vez. La idea es que cambie acorde al bloque en el que está escrito, es decir, si $ghostcmd está dentro de if($tif){...} debería valer
Sintáxis: [ Descargar ] [ Ocultar ]
  1. gs -q -dNOSAFER -sDEVICE=tiff32nc -r 150  

Y así con el resto de los bloques.

La pregunta es, ¿qué modificaciones debo hacer para lograr esto? O mejor dicho, ¿se puede hacer esto? Sé que si escribo el código por separado dentro de cada if funcionará, pero, me gustaría dejarlo de esta manera.

Y para terminar, una de las opciones que pasaré al script es clean la cual solo puede tomar cuatro valores (pst, doc, tikz, off, all). Me gustaría que al tomar la opción off "desactivara" todas las otras; al tomar all las activara todas y que pst o tikz activara doc también. Sé que jugando con exists, or y !exists lo puedo hacer pero, quizás exista una forma más cómoda de hacerlo.

Agradecido de antemano,
Pablo
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Publicidad

Re: Texto condicional dentro de bloques

Notapor explorer » 2017-02-03 16:30 @729

Para la primera pregunta, $compiler, tu código escrito de esa manera indica que si $latex está definida, hay que hacer un cambio importante en $compiler. Pero... si es así, ¿por qué no meter el valor de la línea 98 en la línea 87?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.              : $latex ?  "pdflatex $opt_compiler"
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

La solución para la segunda pregunta se llama... ¡subrutina o hash!

Primero, agruparía las opciones en un hash:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %opt_gs_dev = (
    pdf  => '-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress',
    gray => '-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray',
    png  => "-sDEVICE=pngalpha -r$DPI",
    bmp  => "-sDEVICE=bmp32b   -r$DPI",
    jpg  => "-sDEVICE=jpeg     -r$DPI -dJPEGQ=100 -dGraphicsAlphaBits=4 -dTextAlphaBits=4",
    tif  => "-sDEVICE=tiff32nc -r$DPI",
);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Declarar un nuevo hash:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %opts;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

donde guardaremos todas las opciones del usuario, en lugar de tener variables separadas.

Luego, modificaría las líneas donde leemos las opciones pasadas al programa. De
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     'pdf!'              => \$pdf,       # pdf
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
a
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     'pdf!'              => \$opts{pdf}, # pdf
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
De esa manera, las opciones que nos pasa el usuario, quedan todas reunidas en un único hash.

Luego, solo queda hacer un bucle.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for my $var (qw(pdf gray png bmp jpg tif)) {
  2.     if (defined $opts{$var}) {
  3.         $ghostcmd = "gs -q -dNOSAFER $opt_gs_dev{$var} -o salida entrada";
  4.         say $ghostcmd;
  5.     }
  6. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Para la última parte... creo que con unos if es más que suficiente.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Texto condicional dentro de bloques

Notapor pablgonz » 2017-02-03 18:23 @807

Muchas gracias por la respuesta y las explicaciones, explorer.
explorer escribiste:Para la primera pregunta, $compiler, tu código escrito de esa manera indica que si $latex está definida, hay que hacer un cambio importante en $compiler. Pero... si es así, ¿por qué no meter el valor de la línea 98 en la línea 87?

La verdad es que $compiler lo usaré dentro system(...) y en la primera parte del programa será $latex, luego de procesar el archivo (no escribí el código de las partes intermedias en el mensaje), deberá cambiar a pdflatex. En todo caso con la línea que tengo escrita funciona.

explorer escribiste:La solución para la segunda pregunta se llama... ¡subrutina o hash!

Genial, algo así me estaba dando vueltas, pero, no me funciona, no encuentro el lugar correcto para definir $ghostcmd, ¿me puedes indicar en que línea debo colocar? Probé en varias parte y no me funcionó :( Solo obtengo el clásico error cuando falta un my.
Sintáxis: [ Descargar ] [ Ocultar ]
  1. Global symbol "$ghostcmd" requires explicit package name ... 


explorer escribiste:Para la última parte... creo que con unos if es más que suficiente.

Tienes razón, durante la tarde saqué esta parte :)

Nuevamente agradecido.
Pablo
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Texto condicional dentro de bloques

Notapor explorer » 2017-02-04 20:58 @915

Pues... si falta un my, pónselo en el contexto más alto donde se vaya a usar.

En el ejemplo que te he puesto, el del for(), si $ghostcmd se va a usar dentro del if(), pues es ahí donde se debe poner.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Texto condicional dentro de bloques

Notapor pablgonz » 2017-02-05 12:40 @570

Creo que no entiendo bien lo que comentas, explorer. El código lo he cambiado a esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.24;
  3. use Getopt::Long qw(:config bundling_values require_order no_ignore_case);
  4.  
  5. ### Variables
  6. my $DPI       = "150";
  7. my $arara     = 0;
  8. my $latex     = 0;
  9. my $dvips     = 0;
  10. my $dvipdf    = 0;
  11. my $xetex     = 0;
  12. my $luatex    = 0;
  13. my $pdf       = 1;
  14. #my $bmp       = 0;
  15. #my $tif       = 0;
  16. #my $png       = 0;
  17. #my $jpg       = 0;
  18. #my $gray      = 0;
  19. my $verbose   = 0;
  20. my $help      = 0;
  21. my @clean     = '';
  22.  
  23. ### Uso
  24. my $usage = <<'USAGE';
  25. Uso:    myscript [options] <file>.<ext>
  26.         myscript --latex   <file>.<ext>
  27.  
  28. USAGE
  29.  
  30. ### Error
  31. sub errorUsage { die "@_ (Use  --help para vel las opciones)\n"; }
  32.  
  33. my %opts;
  34. ### Getopt::Long configuration
  35. my $result=GetOptions (
  36. # formatos imagen
  37.     'd|dpi=i'           => \$DPI,    # entero
  38.     'b|bmp'             => \$opts{bmp},    # gs
  39.     't|tif'             => \$opts{tif},    # gs
  40.     'j|jpg'             => \$opts{jpg},    # gs
  41.     'p|png'             => \$opts{png},    # gs
  42.     'g|gray'            => \$opts{gray},   # gray
  43. # compiladores
  44.     'arara'             => \$arara,  # arara compiler
  45.     'xetex'             => \$xetex,  # xelatex compiler
  46.     'latex'             => \$latex,  # latex compiler
  47.     'luatex'            => \$luatex, # lualatex compiler
  48.     'dvips'             => \$dvips,  # dvips compiler
  49.     'dvipdf'            => \$dvipdf, # dvipdfmx compiler
  50. # clean
  51.     'clean=s{1}'        => \@clean,  # pst doc tikz off
  52. # default
  53.     'help'              => \$help,    # help
  54.     'pdf!'              => \$opts{pdf}, # pdf
  55.     'verbose'           => \$verbose, # verbose
  56.     ) or die $usage;
  57.  
  58. ### Help
  59. if ($help) {
  60.     print $usage;
  61.     exit(0);
  62. }
  63.  
  64. ### Validar clean
  65. my %clean =  map { $_ => 1 } @clean;
  66.  
  67. ### Veamos clean
  68. if(exists($clean{off})){
  69. say "$clean{off}";
  70. }
  71. if(exists($clean{pst})){
  72. say "$clean{pst}";
  73. }
  74.  
  75. ### --shell-escape
  76. my $write18 = '-shell-escape';
  77. $write18 = '-enable-write18' if defined($ENV{"TEXSYSTEM"}) and
  78.                           $ENV{"TEXSYSTEM"} =~ /miktex/i;
  79.  
  80. ### Opciones del compilador
  81. my $opt_compiler = $verbose ? "$write18 -interaction=nonstopmode -recorder"
  82.                  :            "$write18 -interaction=batchmode -recorder"
  83.                  ;
  84.  
  85. ### Compiladores
  86. my $compiler = $xetex ?  "xelatex $opt_compiler"
  87.              : $luatex ? "lualatex $opt_compiler"
  88.              : $latex ?  "latex $opt_compiler"
  89.              : $dvips ?  "latex $opt_compiler"
  90.              : $dvipdf ? "latex $opt_compiler"
  91.              : $arara ?  'arara'
  92.              :           "pdflatex $opt_compiler"
  93.              ;
  94.  
  95. ### Probamos por defecto
  96. say "$compiler archivo.tex";
  97.  
  98. ### Ahora si se usa $latex cambiamos
  99. $compiler = "pdflatex $opt_compiler" if $latex;
  100. say "$compiler archivo.tex";
  101.  
  102. #### DEVICE usados por GS
  103. my %opt_gs_dev = (
  104.     pdf  => '-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress',
  105.     gray => '-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray',
  106.     png  => "-sDEVICE=pngalpha -r$DPI",
  107.     bmp  => "-sDEVICE=bmp32b   -r$DPI",
  108.     jpg  => "-sDEVICE=jpeg     -r$DPI -dJPEGQ=100 -dGraphicsAlphaBits=4 -dTextAlphaBits=4",
  109.     tif  => "-sDEVICE=tiff32nc -r$DPI",
  110. );
  111.  
  112. my $ghostcmd;
  113. my $var;
  114. for my $var (qw(pdf gray png bmp jpg tif)) {
  115.         if (defined $opts{$var}) {
  116.  $ghostcmd = "gs -q -dNOSAFER $opt_gs_dev{$var} -o salida entrada";
  117.          }
  118. }
  119.  
  120. if(defined $opts{pdf}){
  121. say "$ghostcmd";
  122. }
  123.  
  124. if(defined $opts{png}){
  125. say "$ghostcmd";
  126. }
  127.  
  128. if(defined $opts{bmp}){
  129. say "$ghostcmd";
  130. }
  131.  
  132. if(defined $opts{jpg}){
  133. say "$ghostcmd";
  134. }
  135.  
  136. if(defined $opts{tif}){
  137. say "$ghostcmd";
  138. }
  139.  
  140. if(defined $opts{gray}){
  141. say "$ghostcmd";
  142. }
  143. __END__
  144.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Al usar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl script.pl --nopdf --bmp --gray --latex
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

muestra;
Sintáxis: [ Descargar ] [ Ocultar ]
  1. latex -shell-escape -interaction=batchmode -recorder archivo.tex 
  2. pdflatex -shell-escape -interaction=batchmode -recorder archivo.tex 
  3. gs -q -dNOSAFER -sDEVICE=bmp32b  -r150 -o salida entrada 
  4. gs -q -dNOSAFER -sDEVICE=bmp32b  -r150 -o salida entrada 
  5. gs -q -dNOSAFER -sDEVICE=bmp32b  -r150 -o salida entrada 

Saludos
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Texto condicional dentro de bloques

Notapor explorer » 2017-02-05 17:47 @782

Todos los if(defined()... del final, sobran.

Lo que te falta es el "say" (o el procesamiento) de $ghostcmd.

Mira bien mi respuesta anterior, el código del for() que te he puesto. Mira que hay un say dentro del if(), para indicar que es ahí donde queremos procesar $ghostcmd.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Texto condicional dentro de bloques

Notapor pablgonz » 2017-02-05 21:33 @939

Como es habitual tienes toda la razón. Después de mirar bien el for me percaté que era equivalente a todos los defined que estaba usando. Aún así tuve que hacer algunos cambios para que funcionara --nopdf,
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. 'pdf!'              => \$pdf,     # pdf
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y quedó así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.24;
  3. use Getopt::Long qw(:config bundling_values require_order no_ignore_case);
  4.  
  5. ### Variables
  6. my $DPI       = "150";
  7. my $arara     = 0;
  8. my $latex     = 0;
  9. my $dvips     = 0;
  10. my $dvipdf    = 0;
  11. my $xetex     = 0;
  12. my $luatex    = 0;
  13. my $pdf       = 1;
  14. my $verbose   = 0;
  15. my $help      = 0;
  16. my @clean     = '';
  17.  
  18. ### Uso
  19. my $usage = <<'USAGE';
  20. Uso:    myscript [options] <file>.<ext>
  21.         myscript --latex   <file>.<ext>
  22.  
  23. USAGE
  24.  
  25. ### Error
  26. sub errorUsage { die "@_ (Use  --help para vel las opciones)\n"; }
  27.  
  28. my %opts;
  29. ### Getopt::Long configuration
  30. my $result=GetOptions (
  31. # formatos imagen
  32.     'd|dpi=i'           => \$DPI,    # entero
  33.     'b|bmp'             => \$opts{bmp}, # gs
  34.     't|tif'             => \$opts{tif}, # gs
  35.     'j|jpg'             => \$opts{jpg}, # gs
  36.     'p|png'             => \$opts{png}, # gs
  37.     'g|gray'            => \$opts{gray},# gray
  38. # compiladores
  39.     'arara'             => \$arara,  # arara compiler
  40.     'xetex'             => \$xetex,  # xelatex compiler
  41.     'latex'             => \$latex,  # latex compiler
  42.     'luatex'            => \$luatex, # lualatex compiler
  43.     'dvips'             => \$dvips,  # dvips compiler
  44.     'dvipdf'            => \$dvipdf, # dvipdfmx compiler
  45. # clean
  46.     'clean=s{1}'        => \@clean,   # pst doc tikz off all
  47. # default
  48.     'help'              => \$help,    # help
  49.     'pdf!'              => \$pdf,     # pdf
  50.     'verbose'           => \$verbose, # verbose
  51.     ) or die $usage;
  52.  
  53. ### Help
  54. if ($help) {
  55.     print $usage;
  56.     exit(0);
  57. }
  58.  
  59. ### Validar clean
  60. my %clean =  map { $_ => 1 } @clean;
  61.  
  62. ### Veamos clean
  63. if(exists($clean{off})){
  64. say "$clean{off}";
  65. }
  66. if(exists($clean{pst})){
  67. say "$clean{pst}";
  68. }
  69.  
  70. ### --shell-escape
  71. my $write18 = '-shell-escape';
  72. $write18 = '-enable-write18' if defined($ENV{"TEXSYSTEM"}) and
  73.                           $ENV{"TEXSYSTEM"} =~ /miktex/i;
  74.  
  75. ### Opciones del compilador
  76. my $opt_compiler = $verbose ? "$write18 -interaction=nonstopmode -recorder"
  77.                  :            "$write18 -interaction=batchmode -recorder"
  78.                  ;
  79.  
  80. ### Compiladores
  81. my $compiler = $xetex ?  "xelatex $opt_compiler"
  82.              : $luatex ? "lualatex $opt_compiler"
  83.              : $latex ?  "latex $opt_compiler"
  84.              : $dvips ?  "latex $opt_compiler"
  85.              : $dvipdf ? "latex $opt_compiler"
  86.              : $arara ?  'arara'
  87.              :           "pdflatex $opt_compiler"
  88.              ;
  89.  
  90. ### Probamos por defecto
  91. say "$compiler archivo.tex";
  92.  
  93. ### Ahora si se usa $latex cambiamos
  94. $compiler = "pdflatex $opt_compiler" if $latex;
  95. say "$compiler archivo.tex";
  96.  
  97. #### DEVICE usados por GS
  98. my %opt_gs_dev = (
  99.     pdf  => '-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress',
  100.     gray => '-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray',
  101.     png  => "-sDEVICE=pngalpha -r$DPI",
  102.     bmp  => "-sDEVICE=bmp32b   -r$DPI",
  103.     jpg  => "-sDEVICE=jpeg     -r$DPI -dJPEGQ=100 -dGraphicsAlphaBits=4 -dTextAlphaBits=4",
  104.     tif  => "-sDEVICE=tiff32nc -r$DPI",
  105. );
  106.  
  107. if($pdf){
  108. $opts{pdf} = 'pdf';
  109. }
  110.  
  111. for my $var (qw(pdf gray png bmp jpg tif)) {
  112.         if (defined $opts{$var}) {
  113.  my $ghostcmd = "gs -q -dNOSAFER $opt_gs_dev{$var} -o salida entrada";
  114.  say $ghostcmd;
  115.          }
  116. }
  117.  
  118. __END__
  119.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

¿Cómo agrego $opts{clean}{all|off|pst|tikz|doc}? ya que las opciones están en un hash? ¿Para validar $clean no debería usar otro hash? (supongo).

Saludos
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)

Re: Texto condicional dentro de bloques

Notapor explorer » 2017-02-06 03:04 @169

El hash ya lo tienes hecho, en la línea 60. Falta por agregar la lógica según las entradas existentes.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($clean{pst} or $clean{tikz}) {
  2.     $clean{doc} = 1;                            # si pst o tijz, activamos doc
  3. }
  4. if ($clean{all}) {
  5.     @clean{qw(pst doc tikz)} = (1) x 3;         # activamos todas las opciones
  6. }
  7. if ($clean{off}) {
  8.     undef %clean;                               # desactivamos todas las opciones
  9. }
  10.  
  11. # ...
  12.  
  13. for my $c (qw(pdt tikz doc)) {
  14.     if ($clean{$c}) {
  15.         # procesar
  16.     }
  17. }
  18.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Texto condicional dentro de bloques

Notapor pablgonz » 2017-02-06 15:32 @689

Muchas gracias por la respuesta, ahora puedo rellenar el esqueleto de script usando la idea del hash.

Agradecido,
Pablo.
pablgonz
Perlero nuevo
Perlero nuevo
 
Mensajes: 236
Registrado: 2010-09-08 21:03 @919
Ubicación: Concepción (Chile)


Volver a Básico

¿Quién está conectado?

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