Soy absolutamente nuevo en Perl y estoy tratando de resolver un problema con los argumentos del script de análisis de scripts de Perl.
Tengo el siguiente script de Perl llamado sample-perl.pl:
use strict;
use warnings;
use 5.010;
use Getopt::Long qw(GetOptions);
my $source_address;
my $dest_address;
GetOptions("from=s" => $source_address,
"to=s" => $dest_address) or die "Usage: $0 --from NAME --to NAMEn";
if ($source_address) {
say $source_address;
}
if ($dest_address) {
say $dest_address;
}
Y si uso un comando como (donde olvidé entrar en la segunda opción)
perl sample-perl.pl --from nyc lon
Output will be: nyc
¿Cómo puedo hacer que, si hay una cadena adicional al final, se detecte y se muestre un error en su lugar?
Solución:
Añadiendo esto me ayudará al menos mi caso:
if(@ARGV){
//throw error
}
Respuestas
1 para la respuesta № 1Despues de llamar GetOptions
, compruebe si hay opciones de línea de comando restantes en el @ARGV
formación. Esto supone que todos los argumentos inesperados generarán un error:
use strict;
use warnings;
use 5.010;
use Getopt::Long qw(GetOptions);
my $source_address;
my $dest_address;
GetOptions("from=s" => $source_address,
"to=s" => $dest_address) or die "Usage: $0 --from NAME --to NAMEn";
@ARGV and die "Error: unexpected args: @ARGV";
if ($source_address) {
say $source_address;
}
if ($dest_address) {
say $dest_address;
}
1 para la respuesta № 2
Estaba ocupado contestada y veo que ahora está respondida, solo información adicional.
use strict;
use warnings;
use 5.010;
use Getopt::Long qw(GetOptions);
my $source_address;
my $dest_address;
GetOptions("from=s" => $source_address,
"to=s" => $dest_address) or die "Usage: $0 --from NAME --to NAMEn";
@ARGV and die "To many arguments after --from or --to : @ARGV ";
if ($source_address) {
say $source_address;
} else {
say "Error: No Source specified"; #Check to see if --from is actually specified, else print error.
}
if ($dest_address) {
say $dest_address;
} else {
say "Error: No destination specified"; #Check to see if --to is actually specified, else print error.
}
en resumen