/ / ¿Cómo usar GetOptions para detectar cadenas finales? - Perl, getopt, getopt-long

¿Cómo usar GetOptions para detectar cadenas finales? - Perl, getopt, getopt-long

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 № 1

Despues 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