Using perl Syntax Highlighting
- #!/usr/bin/perl
- use v5.12;
- use strict;
- use warnings;
- use MIME::Base64;
- use Getopt::Long;
- #Programa de codificación y decodificación en base64. De acuerdo con la información del módulo #MIME::Base64 codificaremos en múltiplos de 57 bytes: "This ensures that the base64 lines
- #line up and that you do not end up with padding in the middle. 57
- #bytes of data fills one complete base64 line (76 == 57*4/3)"
- sub enc{
- open my $fhi, "<", $_[0] or die "$!\n";
- binmode $fhi;
- open my $fho, ">", $_[1] or die "$!\n";
- while(read($fhi, my $buffer, 30*57)){
- print $fho &encode_base64($buffer);
- }
- close $fho;
- close $fhi;
- return 1;
- }
- sub dec{
- open my $fhi, "<", $_[0] or die "$!\n";
- binmode $fhi;
- open my $fho, ">", $_[1] or die "$!\n";
- while(read($fhi, my $buffer, 30*57)){
- print $fho &decode_base64($buffer);
- }
- close $fho;
- close $fhi;
- return 1;
- }
- my ($entrada, $salida, $func);#Parámetros del programa.
- die "Uso: $0 --entrada <fichero> --salida <fichero> --op <cod|decod>\n" if (@ARGV != 6 or !GetOptions('entrada=s' => \$entrada, 'salida=s' \
- => \$salida, 'op=s' => \$func));
- if($func eq 'cod'){
- my $op = &enc($entrada, $salida);
- say "Fichero $entrada procesado";
- exit 1;
- }
- elsif($func eq 'dec'){
- my $op = &dec($entrada, $salida);
- say "Fichero $entrada procesado";
- exit 1;
- }
- else{
- say "Opciones --op no reconocidas. Valores 'cod' o 'dec'";
- exit 1;
- }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Tras buscar algún manual, (porque perldoc -m Getopt::Long me muestra el código, pero no su documentación), he visto que si quiero utilizar una opción como la de 'op' en mi programa que sólo puede tomar dos valores, ('cod' or 'dec'), puedo hacer dos cosas: usar una opción 'op=i' y usarla como 'flag' para, una vez comprobada, ejecutar la función codificar o la de decodificación, o bien, la opción que he tomado 'op=s' y comprobar los valores de la cadena para tomar la decisión de qué función ejecutar.
Me queda la duda de si Getopt::Long no tendrá habilitada una forma de 'parsear' por sí mismo un rango de valores posibles para cada opción.
Entiendo también que en la condición
Using perl Syntax Highlighting
- if (@ARGV != 6 or !GetOptions('entrada=s' => \$entrada, 'salida=s' \
- => \$salida, 'op=s' => \$func));
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Un saludo